Integer使用 "==" 比较大小

类似Integer这样的包装类,在使用  "=="  比较大小的时候,会调用valueOf方法进行比较

下面是源码

public static Integer valueOf(int i) {    
       if(i >= -128 && i <= IntegerCache.high)    
           return IntegerCache.cache[i + 128];    
       else    
           return new Integer(i);    
}    

如果你new一个Integer的时候,整数类型在-128~127之间时,会使用缓存,造成的效果就是,如果已经创建了一个相同的整数,使用valueOf创建第二次时, 不会使用new关键字,而用已经缓存的对象。所以使用valueOf方法创建两次对象,若对应的数值相同,且数值在-128~127之间时,两个对象都指 向同一个地址。

 

例如

Integer i = 100;  
Integer j = 100;  

这时候,使用  "=="  比较  i 和  j  的时候,你会发现是 相等 的。

Integer i = 300;  
Integer j = 300;  

这时候,使用  "=="  比较  i 和  j  的时候,你会发现是 不相等 的。

你可能感兴趣的:(常识区)