beizili

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

类似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  的时候,你会发现是 不相等 的。

 

更多内容请关注微信公众号“外里科技

官方公众号外里科技
运营公众号英雄赚
微信wxid_8awklmbh1fzm22
QQ1247408032
开源代码https://gitee.com/B_T/beimi

 

posted on 2018-08-24 14:35  被子里  阅读(25)  评论(0)    收藏  举报  来源