Java中int和integer的比较

  • 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 //这个就是文章一开始所说的 “常量池溢出”(我编的),即常量池没有这个玩意儿。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值