我有以下代码
class Demo {
static int a = 0;
static int b = 1;
static {
a = ++b;
}
void gam(int x) {
a = a * x;
b = b * x;
}
}
class Test {
public static void main(String[] args) {
Demo d1 = new Demo();
Demo d2 = new Demo();
d1.a++;
d2.a--;
System.out.println(d1.a + " " + d1.b + " " + d2.a + " " + d2.b);
}
}
但是我无法弄清楚为什么d1.a是2.不应该是3吗?由于a=++b
使其为2而d1.a++
使其为3?
答案 0 :(得分:10)
变量a
为static
,因此a
的所有实例只有一个Demo
。它从0
开始,static
初始值设定项将其设置为++b
或2
。然后,d1.a++
将其增加到3
,但d2.a--
将相同的 a
减少到2
。
答案 1 :(得分:0)
d1.a
是一个静态成员字段,因此不应通过实例访问它。它应该通过以下方式访问:Demo.a
。
顺便说一句,d1.a
和d2.a
引用相同的静态成员字段,因此a
中d1.a++
的增量是“滚动支持”的减量:d2.a--
。