比较Java中的int和Integer

时间:2016-03-09 22:26:17

标签: java

请考虑以下代码段:

Integer Foo = 2;
int foo = 1;
boolean b = Foo < foo;

使用<int完成Integer?那么==呢?

4 个答案:

答案 0 :(得分:4)

对于所有关系运算符(包括<==),如果一种类型是另一种类型的盒装模拟,则盒装类型将转换为未装箱的形式。

所以你的代码相当于Foo.intValue() < foo;。这比您想象的要深:如果Foo < fooNullPointerException,您的Foo 抛出null

答案 1 :(得分:3)

根据JLS,15.20.1

  

数值比较运算符的每个操作数的类型必须是a   可转换的类型(第5.1.8节)到原始数字类型,或发生编译时错误。对操作数执行二进制数字提升(第5.6.2节)。

此外,5.6.2表示

  

如果任何操作数属于引用类型,则进行拆箱转换

这解释了程序中发生的情况:在执行比较之前,Integer对象已取消装箱。

答案 2 :(得分:2)

由于Autoboxing and Unboxing,我们将使用int完成这些操作。

答案 3 :(得分:0)

java中基元类型的包装类型从Object到兼容的基本类型自动“类型转换”(或自动装箱/拆箱)。因此,在将整数传递给比较运算符或算术运算符(如&lt;)之前,将整数转换为整数。 ,&gt; ,==,=,+和 - 等

相关问题