一、基础篇--1.1Java基础-int 和 Integer 有什么区别,Integer的值缓存范围

int和Integer的区别

  1. int是基本数据类型,Integer是int的包装类。
  2. Integer必须实例化后才能使用,int变量不需要。
  3. Integer实际是对象的引用,生成一个新对象实际上是生成一个指针指向此对象;而int则是直接存储数据值。
  4. Integer默认值是null,int默认值是0;

Integer的缓存范围是-128到127。

关于Int和Integer比较的一些延伸:

例子:

 Integer a= new Integer(100);

 Integer b = new Integer(100);

 int c = 100;

 Integer d = 100;

 Integer e = 100;

 Integer f = 128;

 Integer g =128;

 ①、System,out.print(a==b);//false

 ②、System,out.print(a==c);//true

 ③、System,out.print(a==d);//false

    ④、System,out.print(d==e);//true

 ⑤、System,out.print(f==g);//false

 

解析:
  ①:Integer变量是对一个Integer对象的引用。通过new生成的Integer变量地址永远不相等。因此false;

  ②:Integer和int作比较,Integer会自动做拆箱操作转化为int类型,因此是两个数值的值比较,所以相等,因此true;

  ③:new生成的对象在堆中,非new生成的对象在java的常量池中,因此非new生成的Inte变量和new Integer()生成的变量比较时总为false;

  ④&&⑤:对呀两个非new生成的Integer对象比较时,如果两个变量值在区间-128到127之间,比较结果为true,不在这个范围的则为false;

java在编译Integer d = 100;时,会编译成Integer d = Integer.valueOf(100);,看java Api源码可以知道:

    public static Integer valueOf(int i) {
        assert IntegerCache.high >= 127;
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

 

java对于-128到127之间的数进行缓存,如果再这个范围内不在new生成; 

转载于:https://www.cnblogs.com/foreverYoungCoder/p/9921031.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值