黑马程序员技术交流社区

标题: 有意思这题 [打印本页]

作者: 种法腾    时间: 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