Integer小心得

本文讲解的是不用new关键字去创建Integer,它的引用会有什么不同。

题目

笔者是一个Java基础不怎么牢固的CRUD工程师,前些日子,我们老师给我们出了个题,题目如下:

Integer num1 = 128;
Integer num2 = 128;
System.out.println(num1 == num2);

当时我的想法是,Integer是一个引用数据类型,那它每次创建不都应该是一个新的地址引用吗?然后果断答了false,答案是对的,但是验证过程却错的离谱。

答案:false

我们再来看一个题

Integer num3 = 127;
Integer num4 = 127;
System.out.println(num3 == num4);

那个题和上面题相似度99%,只是存储的变量从128降到了127,嗯,难道减了个1结果还发生变化吗?是的。

答案:true

那这是为什么呢?

 

解题

我首先拿着第一个题,在第一行打上断点,开始debug。

 

按下Alt + Shift + F7 追进去看看,我们发现创建变量时做了一个判断,当你创建的数字 >= low && <= high的时候,它返回了一个数组的元素,那这个范围是多少呢?

 

我们往上翻,会看到:

 

我们发现这个范围就是-128到127之间,那它返回的数组是什么呢?我们发现cache是一个Integer数组,长度是(127 - (-128)) + 1 = 256,他的元素是从low ~ high。

 

总结

从以上的源码分析,我们发现:

Integer如果在 -128 - 127 之间的时候,它引用的是cache数组的元素;

超过范围,就用new去开辟一个空间。

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值