class Test{
public static void main(String[] args){
int a = 1;
int b = 5;
Integer c = new Integer(1);
Integer d = 5; //autoBoxing at work
System.out.println(c.compareTo(d));
System.out.println(a.compareTo(b));
}
}
为什么不a.compareTo(b)编译(int不能被解除引用)?我知道compareTo需要对象,但我认为autoBoxing会在必要时自动将int设置为Integer.为什么在这种情况下不会发生自动装箱?还有什么其他情况不会发生?
最佳答案
从Oracle tutorial on Autoboxing开始,拳击将发生的两种情况是,当原语是:
>作为参数传递给期望相应包装类的对象的方法.
>分配给相应包装类的变量.
在您的示例中评估的表达式(a.compareTo(d))不属于任何一种情况.
这是JCP proposal for autoboxing中的一些有趣的附加信息,描述了赋值转换,方法调用转换和转换转换的机制和规则.