Java中int和integer的比较

版权声明:转载请注明出处。 https://blog.csdn.net/bagpiping/article/details/84288697
  • Java中,数值型的创建和字符串有类似的地方,Integer是Java为了使用对象的属性和方法给int准备的类型。字符串 String s = “bag”; 这样创建会在常量池中查找 bag,没有的话就新建,并不会在堆里新建。
  • 同样地,Integer i = 11;也不会在堆里面新建,最多在数字常量池新建。
  • Java为了提高效率,把一些最常用的数值放到了“数字常量池”,不超过这个范围的数字都会把引用指向常量池。这个数字常量池的范围-128~127,超过这个范围就会去堆。下面的代码会说明这个:
public class Demo {
    public static void main(String[] arg) {
        int a = 10;
        int b = 10;
        Integer A = 10;
        Integer B = 10;
        Integer C = new Integer(10);
        Integer D = new Integer(10);
        Integer E = 128;
        Integer F = 128;

        System.out.println(a == b);
        System.out.println(A == B);
        System.out.println(C == D);
        System.out.println(A == C);
        System.out.println(a == C );
        System.out.println(a == A);
        System.out.println(E == F);
    }
}

运行结果:
true //基本数据类型,在栈中指向同一个值
true //和字符串一样,指向常量池的同一个值,不在堆中新建
false //new了两个integer的对象,两个内存地址不一致。这里要注意的是 == 的意思。
false //同上
true //涉及 int 和 integer,C 自动拆箱,然后和a进行比较
true //自动拆箱
false //这个就是文章一开始所说的 “常量池溢出”(我编的),即常量池没有这个玩意儿。。。

猜你喜欢

转载自blog.csdn.net/bagpiping/article/details/84288697