【发布时间】:2019-02-06 00:07:18
【问题描述】:
为什么在方法中会发生自动装箱
public static int compareAges(Person p1, Person p2) {
return ((Integer) p1.getAge()).compareTo(p2.getAge());
}
但是我们在方法中得到一个编译器错误
public static int compareAges(Person p1, Person p2) {
return p1.getAge().compareTo(p2.getAge());
}
?
根据 Javadocs:
自动装箱是 Java 编译器在基本类型与其对应的对象包装类之间进行的自动转换。
那么,换句话说,为什么编译器不能在第二种方法中执行自动装箱呢?是不是因为在第二种方法中,绑定不是显式的,而在第一种方法中绑定是明确的。
【问题讨论】:
-
这里的答案stackoverflow.com/questions/19017258/… 很好读。
-
@nullpointer 这与绑定无关。 Java 只是选择不支持这种语法。发现了将近 10 年前的重复内容stackoverflow.com/questions/4242/…
-
@Oleg 甚至我都在深入研究以想出类似的东西。我猜
Integer.compare(a,b)应该有效地用于此类事件。 -
@nullpointer, Oleg:我觉得除了选择不支持它之外,还有更强有力的理由。然而,这就是无处不在的答案。
-
@nullpointer 可能只是 James Gosling 没有发现有用的另一件事,所以当然这意味着没有其他人可以使用它(比如运算符重载)。
标签: java autoboxing