Java 巨坑篇之无底深坑Long类型

背景:

因为公司使用的spring jpa 一般表的主键都是Long类型,突然有一次程序好好的跑着啥呀没有改突然死活不进入那个if(entity.id==otherEntity.id) 我开始怀疑人生,开始怀疑Java,开始怀疑Windows是不是系统原因,我甚至开始怀疑是不是硬件原因。



最后找不出问题的我,只能求助baidu.com,google.com,但却不知道搜什么,就输入了一个:Long ==Long

居然一篇篇看下来,发现了点什么,佩服我的机智。

可能还是应了那句古话,帅人有帅报~!

前言:

long数据类型是64位有符号的Java原始数据类型。当对整数的计算结果可能超出int数据类型的范围时使用。

long数据类型范围是-9,223,372,036,854,775,808至9,223,372,036,854,775,807(-2^63至2^63-1)。

long数据类型范围内的所有整数称为long类型的整数字面量。long类型的整数常数总是以大写L或小写l结尾。

问题:

if( Long == Long )不匹配?

原因:

其实,通过源码分析:

1
2
3
4
5
6
7
public static Long valueOf(long l) {
final int offset = 128;
if (l >= -128 && l <= 127) { // will cache
return LongCache.cache[(int)l + offset];
}
return new Long(l);
}
在128~127这些数的对象在内存中被缓存起来,在内存中提供重用,这些数获取的时候就会自动获取缓存中的数,而不是new出来的对象。

所以,这与自动打包拆包无关。

再所以…,判读Long对象是否相等的时候建议不要采用 == 的形式,程序中无法绝对的判断参数值是否会在这个区间内,如果不在,那就出现让你摸不着头脑的问题。

解决方案:

entity.getId().longValue()==otherEntity.getId().longValue 完美解决!

这是我的公众号 有最新的it咨询,和个人工作的记录:
在这里插入图片描述

这是我的个人微信遇到问题欢迎,提问:
在这里插入图片描述

最后加上高质量的淘宝店:如有质量问题随时滴滴我,童叟无欺!

在这里插入图片描述

【童装园服定制店铺】https://m.tb.cn/h.ef2J8CD?sm=6e0f74 点击链接,再选择浏览器咑閞;或復·制这段描述¥zfwjY4JVngW¥后到淘♂寳♀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值