论坛首页 入门技术论坛

Integer与int区别

浏览 1848 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-01-23  
[i][/i]
		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
   发表时间: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了。
1 请登录后投票
论坛首页 入门技术版

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