一个奇怪的问题,大家解释下原因

baobeiSimple 2008-01-12 01:48:31

简单的代码如下:

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?谁解释下原因。
...全文
77 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunyujia 2008-01-12
  • 打赏
  • 举报
回复
原来这样 这个地方很容易在编程中出现bug,半年前写标签库时遇到过一回,完全忘记了.没记牢啊.

不过一般来说我很少用int,大部分是在用Integer,所以出了错,可以很快定位.小int就完全不同了,没有一定经验在大型程序中很难分析.
baobeiSimple 2008-01-12
  • 打赏
  • 举报
回复
谢谢 java2000_net!

java2000_net 说得对。

谢谢大家!
老紫竹 2008-01-12
  • 打赏
  • 举报
回复
当然是0啦!

public static int n=0;
不同的地方是
n 在分配存储空间的时候是0,
而n=0又被再次赋值,覆盖掉了前面的new()里面的赋值操作。
restartrr 2008-01-12
  • 打赏
  • 举报
回复
to ls
一个问题

public static int m;
没有赋值,那么m应该是可能为任意值,还是为0?
老紫竹 2008-01-12
  • 打赏
  • 举报
回复
static 是按照顺序初始化的。请看下面你的代码
private   static   SingleStatic   ss=new   SingleStatic(); // 次语句让m和n都增加1,所以此时他们都等于1

public static int m; // 此代码没有赋值,所以无用
public static int n=0; // 此代码再次把m赋值为0, 所以你调用时,n=0;
sunyujia 2008-01-12
  • 打赏
  • 举报
回复
to 1楼 应改为0的而不是默认值,这是java不是c++
sunyujia 2008-01-12
  • 打赏
  • 举报
回复
有点意思
n=n+m;n=n+n;
也是0
看来问题出在++运算符
vironica 2008-01-12
  • 打赏
  • 举报
回复
你的m没有初始化,初值可能为任何值啊。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧