码迷,mamicode.com
首页 > 其他好文 > 详细

自动装箱时的问题

时间:2016-01-04 19:42:05      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

在一些Wrapper对象中, 例如Integer,在范围-128 到127之间如果通过“==”进行比较得到的返回值是true的话,那么他们返回的就是相同的对象,但是在这个范围之外就不行。通常是这种行为更多依赖于JVM,因此检查时最好是用equals()方法而避免使用“==”。

示例:

Integer i1 = 200;
Integer i2 = 200;
 
if (i1 == i2) 
  System.out.println("相等");
else
  System.out.println("不相等");

结果是“不相等”。因为在这个例子中,自动拆箱并没有执行。“200”这个字面值被装箱在两个不同的整型对象(不同的JVM结果可能不一样),然后这些对象通过“==”进行比较,结果是false,因为这两个对象是不同的实例,拥有不同的内存地址。

Integer i1 = 100;
Integer i2 = 100;
 
if (i1 == i2) 
  System.out.println("相等");
else
  System.out.println("不相等");

此时结果是”相等”。因为int的值在-127到127这个范围内JVM会将值缓存起来,所以“==”会返回true的结果。

 

自动装箱时的问题

标签:

原文地址:http://www.cnblogs.com/tianex/p/5100002.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!