有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    让我们浏览一下执行顺序:

    1. new d()创建d的对象之前,它需要调用super()
    2. 控件被转移到b的默认构造函数
    3. b的构造函数将调用方法b,但由于类d中存在可用的重写方法,因此将调用它
    4. 请注意,b的实例尚未创建,i的值是隐藏的(d.i隐藏b.i),因此i的值是0。这样做 i会生成-1作为输出