简单的代码如下: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?谁解释下原因。
n=n+m;n=n+n;
也是0
看来问题出在++运算符
private static SingleStatic ss=new SingleStatic(); // 次语句让m和n都增加1,所以此时他们都等于1public static int m; // 此代码没有赋值,所以无用
public static int n=0; // 此代码再次把m赋值为0, 所以你调用时,n=0;
一个问题public static int m;
没有赋值,那么m应该是可能为任意值,还是为0?
与
public static int n=0;
不同的地方是
n 在分配存储空间的时候是0,
而n=0又被再次赋值,覆盖掉了前面的new()里面的赋值操作。