浏览 1841 次
锁定老帖子 主题:Integer
该帖已经被评为新手帖
作者 正文
   发表时间:2008-03-18   最后修改:2008-11-19
Integer i = 100;
Integer j = 100;
Integer m = new Integer(100);
Integer x = 200;
Integer y = 200;
System.out.println(i == j);
System.out.println(i == m);
System.out.println(x == y);

为什么i==j是true;x==y是false?

解答:有些primitive值会被unbox成常量、不可变的wrapper对象,-127到127之间的值是不可变的wrapper类型,虚拟机对i和j使用了同样的对象实例及内存地址。
   发表时间:2008-03-18  
挺简单的东西,怎么讲得这么复杂?wrapper对象啥的。

看看Integer的源代码就知道了,其实就是Integer把-127-128之间的每个值都建立了一个对应的Integer对象,类似一个缓存。由于Integer是不可变类,因此这些缓存的Integer对象可以安全的重复使用。

比如Integer.valueOf(int),就是先判断是否在-127-127之间,如果是直接return已经存在的对象,否则就只能new一个了。

这也就是为什么要尽量写Interger.valueOf(int),而不是new Integer(int)了。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics