日期:2014-05-20  浏览次数:20863 次

static关键字问题
public class B {
  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;
  }
}

public class A {
  public static void main(String args[]){
B b1=new B();
B b2=new B();
b1.setN(3);
b2.setN(5);
int s1=b1.getSum();  
int s2=b2.getSum();
System.out.println(s1+s2);
  }
}
运行后输出为27,我想问为什么不是45呢?
我的想法是这样的:第一次b1.getSum();这里执行后sum的值是6,那么执行b2.getSum();
这里的时候sum=6;然后做循环的话就应当相当于
int sum=6;
for(int i=1;i<=5;i++){
  sum=sum+i;
 }
这样的话结果就应该是45了。

------解决方案--------------------
b1.setN(3);/*sum依次为1,3,6*/
b2.setN(5);/*sum依次为7,9,12,16,21*/
你算错了
------解决方案--------------------
这样子 不对 看我的
static new的时候 sum从新变回了0
所以s1 和 s2 开始的时候是一样的都是从sum=0开始
s1。get=1+2+3=6
s2.get=1+2+3+4+5=21
固 ————》》》 6+21=27
楼主,明白?
------解决方案--------------------
我也对static不是太懂,但这个看懂了
------解决方案--------------------
不知道啊!所以试试啊
------解决方案--------------------
static 静态变量,在编译时就分配内存了,所以2个类操作的都是同一个内存地址!数学没学好,搞编程也老火啊