Java 整数类型的包装类比较 用==还是equals

                        Java 整数类型的包装类比较 用==还是equals

前一段时间,在项目中 比较两个Long 类型的时候 使用==的时候,有时候正确 有时候却不正确。很是疑惑。如图
在这里插入图片描述

这个结果是正确的。但是把比较的值增大 比如把20 更改成128
在这里插入图片描述
返回的却是false, 为什么会这样呢。很是费解 ,决定深究一下。
== 是比较两个 变量的值是否是一样的。那么为什么Long 在有的情况下是相等,有的情况下是不等的呢,查看一下字节码,看看这段代码到底是如何执行的。
在这里插入图片描述
原来我们在执行n1==n2的时候,Long 包装类型会通过Long.valueOf()方法 把n1和n2,转换之后再进行比较的,那么在看看这个Long.valueOf()方法的源码
在这里插入图片描述
这样一目了然了吧,Long.valueOf() 方法会把 -127 到128 之间的数字缓存起来,比较-127 到128之间的数字 Long 会去从缓存中拿取最后的值和传入的值进行比较。这个比较自然是true的,但是 如果大于128的不会放入缓存,这个时候比较的是两个Long 类型的内存地址对象。自然的是返回false.

那么 用equals 会是什么结果呢
在这里插入图片描述
在这里插入图片描述
显然 若是用 equals 不论 是 变量是20 还是128结果都是 true. 这个是为什么呢,看一下Long 的equals源码
在这里插入图片描述
使用Long 的equals方法 比较两个Long 的时候Long 会通过longValue()方法把Long 转换成long 再比较两个值.结果自然是 true.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值