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坏了吗
# 1 楼答案
让我们浏览一下执行顺序:
new d()
创建d
的对象之前,它需要调用super()
李>b
的默认构造函数李>b
的构造函数将调用方法b
,但由于类d
中存在可用的重写方法,因此将调用它李>b
的实例尚未创建,i
的值是隐藏的(d.i
隐藏b.i
),因此i
的值是0
。这样做i
会生成-1
作为输出李>