【问题标题】:Java compiler integer bug [duplicate]Java编译器整数错误[重复]
【发布时间】:2021-03-31 16:39:50
【问题描述】:

我有这段代码出现在测验中

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 坏了吗?

【问题讨论】:

    标签: java


    【解决方案1】:

    让我们来看看执行顺序:

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

    【讨论】:

    • 这比一些骗子要好得多,也许你也可以考虑用同样的方式回答其中一些问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 2015-05-28
    • 2017-01-14
    相关资源
    最近更新 更多