位置:首页 > 软件编程 > java
JAVA极易算错的题目
日期:2023-01-06 人气:

大家好,对JAVA极易算错的题目 感兴趣的小伙伴,下面一起跟随三零脚本的小编来看看JAVA极易算错的题目 的例子吧。

class B1
{  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 A1
{ public static void main(String args[])
  {  B1 b1=new B1(),b2=new B1();
     b1.setN(3);
     b2.setN(5);
     int s1=b1.getSum();
     int s2=b2.getSum();
   System.out.println(s1+s2);
  }  
}

上面这道题目,我看完以后,立刻算出了结果是21,但是电脑编绎后的结果却了27。我大吃一惊,反复地算了几遍,怎么也不知道错在哪了。

原因:

1,类变量是所有对象共享的变量。改变其中一个对象的这个类变量会影响其它对象的这个类变量。

2,在类被加载到内存时,如果该类没有创建对象,类中的实例变量就不会被分配内存,但是类变量就分配了相应的内存空间,直到程序退出运行,类变量才释放所占有的内存。

在b1使用getSum()方法时,已经将类变量sum的值改成了6,所以当b2再次使用getSum()方法时,sum值已不再是0,等于是将s1值多加了一遍。

如果将sum改为实例变量,即去掉前面的static,则运行结果是21。