浏览 1849 次
锁定老帖子 主题:Integer与int区别
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2013-01-23
Integer i1=140; Integer i2=140; System.out.println(i1==i2); Integer a1=127; Integer a2=127; System.out.println(a1==a2); int i3=140; int i4=140; System.out.println(i3==i4); 为什么第一个输出时false,后两个是true,int和Integer在存储的过程中的不同在于什么,如果第一个是false那么享元模式又怎么解释?如果说Integer存储的是类,那么为什么第二个是true 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2013-01-30
Integer是对象类型而int是原始类型,这个应该很好理解。
这里的赋值方式 如 Integer i1=140; Integer i2=140; 其实是用来jdk的自动装箱,他们等价于 Integer i1 = Integer.valueOf(140); Integer i2 = Integer.valueOf(140); 所以当比较i1==i2时,比较的是两个对象的引用地址,结果就是false. 那为什么下面的a1和a2又是true? 这里就是用到了享元模式,在Integer对象里, -128-127之间的数值 会存在 一个 缓存池中,下次使用的时候 先从缓存池中 取出 这个数据 ,而不会去分配它的内存。 如果看一下Integer类的代码就明白了 public static Integer valueOf(int i) { if(i >= -128 && i <= IntegerCache.high) return IntegerCache.cache[i + 128]; else return new Integer(i); } 这里的IntegerCache.high,默认就是127,可以通过更改参数来设置更高的值。 所以这里的a1和a2,其实是Integer里的同一个缓存对象,当然比较的结果就是true了。 |
|
返回顶楼 | |