自动装箱规则

问题描述 投票:-2回答:2

为什么自动装箱发生的方法

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());
}

?


由于每的Javadoc:

自动装箱是自动转换,Java编译器使得原语类型和它们的相应的对象的包装类之间。

因此,换句话说,为什么编译器不能在第二种方法进行自动装箱?难道是因为在第二种方法中,绑定不明确,而结合是在第一种方法明确。

java autoboxing
2个回答
1
投票

Java的选择不支持自动装箱,当你调用一个方法对原始可能是因为詹姆斯·高斯林绝不会做自己那么这当然意味着其他开发商将永远需要它这样的事情。

如果你没有得到参考检查this answer

因为詹姆斯·高斯林是这么说的:

我离开了运算符重载一个相当个人的选择,因为我已经看到太多的人滥用它在C ++中。

詹姆斯·高斯林。来源:http://www.gotw.ca/publications/c_family_interview.htm


1
投票

在有关自动装箱https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html的JavaDoc

转换为原始值(一个int,例如)成相应的包装类(整数)的对象被称为自动装箱。 Java编译器适用自动装箱时,原始值是:

  • 作为参数传递给需要相应的包装器类的对象的方法。
  • 分配给相应的包装类的变量。

在第二种方法,自动装箱不会发生。

© www.soinside.com 2019 - 2024. All rights reserved.