Integer“==”和Integer“equals”

以前有碰到Integer“==”和Integer“equals”的问题,但是都没有总结,有时开发时也忘记注意了

 

最近有碰到这个问题了,发现是一个容易忽略的注意点,所以稍微整理了一下

 

看下面这段代码:

 

Java代码   收藏代码
  1. /** 
  2.  * @author wuliwei 
  3.  * 
  4.  */  
  5. public class IntegerEqualsTest {  
  6.     /** 
  7.      * @param args 
  8.      */  
  9.     public static void main(String[] args) {  
  10.         Integer i1 = 2;  
  11.         Integer i2 = Integer.valueOf(2);  
  12.         Integer i3 = Integer.valueOf(2);  
  13.         Integer i4 = Integer.valueOf("2");  
  14.         Integer i5 = Integer.valueOf("2");  
  15.           
  16.         System.out.println("test ==");  
  17.           
  18.         System.out.println("i1 == i2 ? " + (i1 == i2));  
  19.         System.out.println("i1 == i4 ? " + (i1 == i4));  
  20.         System.out.println("i2 == i3 ? " + (i2 == i3));  
  21.         System.out.println("i2 == i4 ? " + (i2 == i4));  
  22.         System.out.println("i4 == i5 ? " + (i4 == i5));  
  23.           
  24.         System.out.println("test equals");  
  25.   
  26.         System.out.println("i1.equals(i2) ? " + i1.equals(i2));  
  27.         System.out.println("i1.equals(i4) ? " + i1.equals(i4));  
  28.         System.out.println("i2.equals(i3) ? " + i2.equals(i3));  
  29.         System.out.println("i2.equals(i4) ? " + i2.equals(i4));  
  30.         System.out.println("i4.equals(i5) ? " + i4.equals(i5));  
  31.     }  
  32.   
  33. }  

 

先来分析下这段代码的对象创建过程:

 

Integer i1 = 2;        这条语句创建了一个整型对象
Integer i2 = Integer.valueOf(2);        这条语句不创建新的对象,i2和i1引用同一个对象
Integer i3 = Integer.valueOf(2);        这条语句不创建新的对象,i3和i1引用同一个对象
Integer i4 = Integer.valueOf("2");        这条语句创建了一个整型对象
Integer i5 = Integer.valueOf("2");        这条语句创建了一个整型对象

 

根据对象的创建过程,很明了,程序运行结果为:

 

Java代码   收藏代码
  1. test ==  
  2. i1 == i2 ? true  
  3. i1 == i4 ? false  
  4. i2 == i3 ? true  
  5. i2 == i4 ? false  
  6. i4 == i5 ? false  
  7. test equals  
  8. i1.equals(i2) ? true  
  9. i1.equals(i4) ? true  
  10. i2.equals(i3) ? true  
  11. i2.equals(i4) ? true  
  12. i4.equals(i5) ? true  

 

感觉很简单,但实际的开发过程中,如果不注意,判断两个Integer相等就直接用“==”,但是在如今这个开源框架的天下,对象的创建很多时候并不是我们想的那样,所以类似Integer这种基础数据类型的相等,也应该跟String判断相等一样,用equals。

但是要注意下,如果是STRING类型的与整形用EQUALS判断结果是FALSE,主意类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值