A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 种法腾 初级黑马   /  2012-3-4 17:41  /  2732 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Demo
{


public static void main(String[] args)
{Integer i=300;
Integer i=300
System.out.println(i==i);//居然是false。,有意思
}



}

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 呵呵

查看全部评分

5 个回复

倒序浏览
== 求的是两个对象是不是同一个内存地址。
Integer i=300;
Integer i=300
有2个对象,当热是false

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
陈建凡 发表于 2012-3-4 17:44
== 求的是两个对象是不是同一个内存地址。
Integer i=300;
Integer i=300

Integer i=127;
Interger i=127
却是真

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 看来你懂

查看全部评分

回复 使用道具 举报
你看花了吧你这样声明,还能通过编译?
回复 使用道具 举报
本帖最后由 田啸 于 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管理区,这时候获得的就是两个对象

评分

参与人数 1技术分 +2 收起 理由
老罗 + 2

查看全部评分

回复 使用道具 举报
明白了
谢谢

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 原来不懂,哈哈。

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马