黑马程序员技术交流社区
标题:
有意思这题
[打印本页]
作者:
种法腾
时间:
2012-3-4 17:41
标题:
有意思这题
class Demo
{
public static void main(String[] args)
{Integer i=300;
Integer i=300
System.out.println(i==i);//居然是false。,有意思
}
}
作者:
陈建凡
时间:
2012-3-4 17:44
== 求的是两个对象是不是同一个内存地址。
Integer i=300;
Integer i=300
有2个对象,当热是false
作者:
种法腾
时间:
2012-3-4 17:51
陈建凡 发表于 2012-3-4 17:44
== 求的是两个对象是不是同一个内存地址。
Integer i=300;
Integer i=300
Integer i=127;
Interger i=127
却是真
作者:
马胜平
时间:
2012-3-4 19:56
你看花了吧你这样声明,还能通过编译?
作者:
田啸
时间:
2012-3-4 20:04
本帖最后由 田啸 于 2012-3-4 20:11 编辑
java为了提高效率,初始化了-128--127之间的整数对象
所以在赋值在这个范围内都是同一个对象。
1。java在编译的时候 Integer a = 100; 被翻译成-> Integer a = Integer.valueOf(100);
2。比较的时候仍然是对象的比较
3. Integer 的范围是-128 127,当符合值范围时候,进入也创建好的静态IntergerCache(-128--127之间的整数对象),这时候直接到这里面去取现成的对象,因此取的是同一个对象(指向的是一个内存空间),当不符合-128 127值范围时候。程序会:new,开辟新的内存空间,不属于IntergerCache管理区,这时候获得的就是两个对象
作者:
种法腾
时间:
2012-3-4 20:37
明白了
谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2