• Integer和int深入理解。


    		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

    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了。

  • 相关阅读:
    常见linux内核线程说明
    /proc/modules分析
    linux用户空间和内核空间(内核高端内存)_转
    二层交换机/三层交换机/路由器
    NAT--Network Address Translator
    curl命令使用
    (转)XML中必须进行转义的字符
    LFCP
    IPSP问题
    API和schema开发过程问题汇总
  • 原文地址:https://www.cnblogs.com/xhk1228/p/3315508.html
Copyright © 2020-2023  润新知