什么时候Integer!= 1成真

时间:2014-09-17 12:43:41

标签: java

这很经典,但写给谷歌没有给我点击。

我的代码:

Integer i = ..; // Sth is put from database.
if (i != 1) {
   // do sth
} else {
   // do not.
}

案例:

我知道这种比较不正确java我应该比较一下:

if (i.intValue != 1) {}

if(!i.equals(1)) {}

但我的代码有第一个,我似乎从某个地方得到了真实,Integer不是1,当它为1时,就会出现错误。

问题:

周围发生了什么?

4 个答案:

答案 0 :(得分:3)

  

但是我的代码有第一个,我似乎从某个地方得到了真实,其中整数不是1而当它是1则出现错误。

如果我正确理解您的问题,以下内容可能会解释这种行为:

Integer i = 1;
Integer j = new Integer(1);
Integer k = Integer.valueOf(1);

System.out.println(i == j);  // false
System.out.println(i == k);  // true

换句话说,根据1的构造方式,与Integer进行比较时,您可以得到真或假。 Integer.valueOf将重用对象,new Integer则不会。

如果你确实与整数文字(或int)进行了比较,那么任何Integer都应该被编译器自动取消装箱,你永远不会有任何意外。

答案 1 :(得分:1)

编译器更改:

if (i != 1)

if(i.intValue()!=1)

答案 2 :(得分:1)

Autoboxing是Java编译器在基元类型和相应的对象包装类之间进行的自动转换。例如,将int转换为Integer,将double转换为Double,依此类推。如果转换采用另一种方式,则称为拆箱。

See this link

答案 3 :(得分:1)

if (i != 1)if (i.intValue != 1)if(!i.equals(1))都相等,并返回相同的值。编译器将自动取消装箱i,将其转换为原始int