为什么不能将int与null进行比较,但可以将Integer与null进行比较

时间:2014-04-01 05:32:15

标签: java integer int

尽管已经在包括SO在内的各种论坛中对此进行了详细讨论,但我已经阅读了大部分专家的回复,但下面的问题让我感到困惑。

我有几个integer个变量,我的要求是在执行几个语句之前检查null。所以首先我声明为int (I don't have knowledge on int and Integer)

int a,b,c;
if(a == null) {
    //code here
}

但是编纂者不允许我这样声明。

在谷歌搜索后,专家建议我使用Integer代替int,当我像下面的代码一样更改时

Integer a,b,c;
if(a == null) {
   //code here
}

编译器没问题,因为Integer在java中定义为Objectint不是。{/ p>

现在我的代码已成为int的一些声明,Integer的声明。

有人建议,如果声明Integer会得到与int相同的结果,我也可以将所有声明更改为Integer

感谢您的时间。

2 个答案:

答案 0 :(得分:3)

int是原始类型,不是可以为空的值(它不能为空)。 Integer是一个类对象,如果尚未实例化,则该对象可以为null。使用Integerint赢得了真正影响功能的任何内容,如果您更改了" int"您的代码将会表现相同到"整数"无处不在。

答案 1 :(得分:3)

int a,b,c;
if (a == null) {
    //code here
}

此代码没有意义,因为原始int类型不能为空。即使你考虑过自动装箱,int a也可以保证在装箱之前有一个值。

Integer a,b,c;
if (a == null) {
   //code here
}

此代码有意义,因为对象Integer类型可以为null(无值)。

就功能而言,Object vs内置类型确实会产生一些差异(由于它们的性质不同)。

Integer a,b,c;
if (a == b) {
  // a and b refer to the same instance.
  // for small integers where a and b are constructed with the same values,
  // the JVM uses a factory and this will mostly work
  //
  // for large integers where a and b are constructed with the same values,
  // you could get a == b to fail
}

,而

int a,b,c;
if (a == b) {
  // for all integers were a and b contain the same value,
  // this will always work
}