黑马程序员技术交流社区

标题: java两个Integer中为什么得出的结果为false [打印本页]

作者: hzhzhen    时间: 2015-5-23 10:51
标题: java两个Integer中为什么得出的结果为false
  1. public class Test{
  2. public static void main(String[] args) {
  3.   Integer i=12338;
  4.   Integer j=12338;
  5.   System.out.println(i==j);
  6. }
  7. }
复制代码

作者: 途中ms前进    时间: 2015-5-23 12:09
jdk1.5出现的新特性:
因为当数值在byte范围内(<128)对于新特性:如果该数值已存在不会再开辟新空间。所以只能
Integer i=127;
Integer j=127;
System.out.println(i=j); // true
作者: 途中ms前进    时间: 2015-5-23 12:10
jdk1.5出现的新特性:
因为当数值在byte范围内(<128)对于新特性:如果该数值已存在不会再开辟新空间。所以只能
Integer i=127;
Integer j=127;
System.out.println(i==j); // true
作者: tougboy    时间: 2015-5-23 16:29
哦 这还得1.5以上才算数啊
作者: Heroe    时间: 2015-5-23 18:58
貌似Integer的缓存在-128-127之间,大的值是重新New出来的,所以地址不一样,判断不相等
作者: 流水0215    时间: 2015-5-23 23:38
只有后面的值在-128到127之间,调用==就是true,反之亦然。
作者: Huylens    时间: 2015-5-24 00:02
jdk源码,方法如下。     public static Integer valueOf(int i) {         if(i >= -128 && i <= IntegerCache.high)             return IntegerCache.cache[i + 128];         else             return new Integer(i);     } 默认的话他会缓存 -127到128之间的整数,其余的他会new。。如果你把12338变成-127到128之间的数结果就是true
作者: ZSMAN    时间: 2015-5-24 08:56
张孝祥的java高新技术里讲过~
作者: 姬光普    时间: 2015-5-24 09:07
途中ms前进 发表于 2015-5-23 12:10
jdk1.5出现的新特性:
因为当数值在byte范围内(

楼上正解
作者: Lucus    时间: 2015-5-24 13:48
学习了  基础视频里有讲吧
作者: lhwinner    时间: 2015-5-24 13:59
基本类型包装类是JDK1.5版本以后出现的新特性,而int基本数据类型的包装类Integer有个特性是所赋予的值在Byte类型的范围内,当第一次赋值后会使用数字保存起来,如果第二次赋值,会先在数组中查找,如果有就直接指向这个Integer对象,不会再开辟内存空间




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2