黑马程序员技术交流社区
标题:
java两个Integer中为什么得出的结果为false
[打印本页]
作者:
hzhzhen
时间:
2015-5-23 10:51
标题:
java两个Integer中为什么得出的结果为false
public class Test{
public static void main(String[] args) {
Integer i=12338;
Integer j=12338;
System.out.println(i==j);
}
}
复制代码
作者:
途中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