【问题标题】:Why isn't unboxing applied in this java code? [duplicate]为什么此 java 代码中未应用拆箱? [复制]
【发布时间】:2016-06-08 10:30:27
【问题描述】:
public class P {
  String m(int i) {
    return "P.m(int)";
  }

  String m(Object o) {
    return "P.m(Object)";
  }
}

public class Test {
  public static void main(String[] args) {
    P p = new P();
    System.out.println(p.m(Integer.valueOf(42)));
  }
}

我不明白为什么这个程序会打印“P.m(Object)”而不是“P.m(int)”。

【问题讨论】:

    标签: java unboxing


    【解决方案1】:

    装箱和拆箱转换只适用于方法重载解析的第二阶段,只有在第一阶段没有找到任何匹配的候选者时才会执行第二阶段。在您的示例中,String m(Object o) 位于第一阶段,因此永远不会执行第二阶段。

    在第一阶段没有使用装箱和拆箱的原因是在更高版本的 Java 中引入了自动装箱和自动拆箱转换,设计人员不想破坏工作代码。

    【讨论】:

      猜你喜欢
      • 2018-06-18
      • 2016-07-11
      • 1970-01-01
      • 2014-01-21
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      • 2018-12-14
      相关资源
      最近更新 更多