Java编译器整数错误
我有这个出现在测验中的代码
public class Main {
public static void main(String[] args) {
class b {
int i = 32;
b() { b(); }
void b() { System.out.println(++i); }
}
class d extends b {
int i = 8;
d() {}
void b() { System.out.println(--i); }
}
b b = new d();
}
}
输出应该是什么?原来答案是-1,而我预计它是7。java 坏了吗?
回答
让我们来看看执行顺序:
- 在
new d()创建 的对象之前d,它需要调用super()。 - 控制权转移到 的默认构造函数
b。 - class 的构造函数
b将调用该方法,b但由于class 中有一个可用的覆盖方法d,它将被调用。 - 请注意,
b尚未创建的实例,并且 的值i是隐藏的(d.i隐藏b.i),因此 的值i是0。这样做--i生成-1作为输出。