public class TEst {
public static void main(String[] args) {
A a1 = new A(), a2 = new A();
a1.setN(3);
a2.setN(5);
int s1 = a1.getSum();
int s2 = a2.getSum();
System.out.println(s1+s2);
System.out.println(s1);
System.out.println(s2);
}
} class A {
int n;
static int sum = 0;
void setN(int n) {this.n = n;}
int getSum() {
for(int i = 1; i <=n; i++)
sum = sum + i;
return sum;
}
}
static 修饰的成员变量是静态成员变量,它是随着类加载而加载,可以被该类的所有实例共享。问题就出在这里,在a1.getSum()方法执行以后
静态成员变量的值已经是6了,这个值也被a2共享,也就是a2访问sum时它的值是6,在经过类加计算以后就得到了27而不是21;如果想得到21只要去掉 static int sum=0;的static修饰符就可以了