简单的代码如下:class SingleStatic
{private static SingleStatic ss=new SingleStatic();public static int m;
public static int n=0;public SingleStatic()
{
m++;
n++;
}public static SingleStatic getInstance()
{
return ss;
}
}public class SingleStaticTest
{
public static void main(String[] args)
{
SingleStatic ss=SingleStatic.getInstance();
System.out.println(ss.m);
System.out.println(ss.n);
}
}输出为:
1
0请问为什么输出不是1,1?谁解释下原因。

解决方案 »

  1.   

    有点意思
    n=n+m;n=n+n;
    也是0
    看来问题出在++运算符
      

  2.   

    to 1楼 应改为0的而不是默认值,这是java不是c++
      

  3.   

    static 是按照顺序初始化的。请看下面你的代码
    private   static   SingleStatic   ss=new   SingleStatic(); // 次语句让m和n都增加1,所以此时他们都等于1public   static   int   m;  // 此代码没有赋值,所以无用
    public   static   int   n=0; // 此代码再次把m赋值为0, 所以你调用时,n=0;
      

  4.   

    to ls
    一个问题public   static   int   m; 
    没有赋值,那么m应该是可能为任意值,还是为0?
      

  5.   

    当然是0啦!

    public   static   int   n=0;
    不同的地方是
    n 在分配存储空间的时候是0,
    而n=0又被再次赋值,覆盖掉了前面的new()里面的赋值操作。
      

  6.   

    谢谢 java2000_net!java2000_net 说得对。谢谢大家! 
      

  7.   

    原来这样 这个地方很容易在编程中出现bug,半年前写标签库时遇到过一回,完全忘记了.没记牢啊.不过一般来说我很少用int,大部分是在用Integer,所以出了错,可以很快定位.小int就完全不同了,没有一定经验在大型程序中很难分析.