黑马程序员技术交流社区
标题:
Integer的问题
[打印本页]
作者:
何伟
时间:
2013-2-27 22:27
标题:
Integer的问题
public class IntegerDemo
{
public static void main(String[] args)
{
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
System.out.println(i1==i2);//这里是true
System.out.println(i3==i4);//而这里又是false
}
}
复制代码
下面一个为什么是false呢?不懂?求解!
作者:
lzw123451
时间:
2013-2-27 22:33
根据 11_黑马程序员_张孝祥_Java基础加强_基本数据的自动拆装箱及享元设计模式
为节约内存,java 把一个字节内 也就是-128~127的整数,的对象都用同一个对象,不另外创建对象。 超过这个数的就另外创建对象
我们把这种模式称为享元设计模式
享元设计模式就是 如果有很多个小的对象,他们有很多属性相同,把他们变成一个对象。那些不同的属性把他变成方法的参数,称之为外部状态,那些相同的属性称之为这个对象的内部状态。
具体情况请看视频。
作者:
何伟
时间:
2013-2-27 22:38
李志卫 发表于 2013-2-27 22:33
根据 11_黑马程序员_张孝祥_Java基础加强_基本数据的自动拆装箱及享元设计模式
为节约内存,java 把一个 ...
了解了,谢谢
作者:
夏振博
时间:
2013-2-27 22:39
这是因为JVM只会将大于等于-128,小于等于127的整数存放到常量池中。
源代码:
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
复制代码
如果大于127,则JAVA会自动将Integer i3 = 200;转换为Integer i = new Integer(200);
作者:
高贵杰
时间:
2013-2-28 13:09
这是因为JVM 可以选择要尝试这段代码的最佳优化,并对两个Integer 对象使用一个实例,
这样的话“= =”就会返回true 了。在自动装箱时对于值从–128 到127 之间的值,
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2