Integer的秘密

先说说int 与 Integer的区别:
Integer是int的包装类,其对象存储在堆中,对象引用在栈中,int为基本数据类型,存储在栈中
int的初值为0,Integer的初值为null
接下来你会发现一些奇怪的地方,这是我不经意的时候发现的奥秘
int i1=3;
int i2=3;
System.out.println(i1 == i2);//true,毋庸置疑,对于基本类型,比较的是值,自然是true

Integer i3=3;
Integer ii3=new Integer(3);
System.out.println(i1 == i3);//true
System.out.println(i1 == ii3);//true,一个基本类型与引用类型比较,比较的也是值
System.out.println(i3 == ii3);//false,两个引用类型比较,比较的是引用

神奇之处来了~~~~
Integer i4=127;
Integer i5=127;
System.out.println(i4 == i5);//true,对于Integer i4=127,Java在编译的时候,
被翻译为Integer i4=Integer.valueOf(127),对于valueOf方法,Integer里弄了一个缓存,对于在-128~127以内的值,会直接使用该缓存里面的对象,所以i4、i5引用相同,为true,若改为128,由于超出缓存范围,则为false,不信自己可以试试
总结一句:多么富有人性化的设计。。。。知道我们平常小整形数用的多,专门整了一下缓存。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值