浏览 1841 次
锁定老帖子 主题:Integer
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-03-18
最后修改:2008-11-19
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使用了同样的对象实例及内存地址。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-03-18
挺简单的东西,怎么讲得这么复杂?wrapper对象啥的。
看看Integer的源代码就知道了,其实就是Integer把-127-128之间的每个值都建立了一个对应的Integer对象,类似一个缓存。由于Integer是不可变类,因此这些缓存的Integer对象可以安全的重复使用。 比如Integer.valueOf(int),就是先判断是否在-127-127之间,如果是直接return已经存在的对象,否则就只能new一个了。 这也就是为什么要尽量写Interger.valueOf(int),而不是new Integer(int)了。 |
|
返回顶楼 | |