kotlin中判断装箱后的Int值是不是相等

扈扈哈嘿 2016-03-18 05:10:38
在kotlin的官方文档上
On the Java platform, numbers are physically stored as JVM primitive types, unless we need a nullable number reference
(e.g. Int? ) or generics are involved. In the latter cases numbers are boxed.

val a: Int = 10000
print(a === a) // Prints 'true'
val boxedA: Int? = a
val anotherBoxedA: Int? = a
print(boxedA === anotherBoxedA) // !!!Prints 'false'!!!
但是把a换成100或是左右的数字则两次都是true???
...全文
432 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jumpAlittle 2018-12-06
  • 打赏
  • 举报
回复
1楼老哥牛逼
dsj304885103 2017-07-14
  • 打赏
  • 举报
回复
是Java的Integer缓存机制导致的 具体可参考http://javapapers.com/java/java-integer-cache/ 简单解释就是Java把-128到127的数都缓存了 引用这个范围内的数都会指向同一个对象,不在这个范围内的就会遵循装箱的规则了,不是同一个对象,所以你定义的 a 大于127就和官网的demo结果一样了,官网用的10000,明显知道这个“坑”

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧