一个简单的关于Long判断问题

xq5236870 2014-12-25 10:31:59

public static void main(String[] args) {
Long l = 127l;
Long b = 127l;
System.out.println(l==b);
}

执行上段代码 输出的为true

public static void main(String[] args) {
Long l = 128l;
Long b = 128l;
System.out.println(l==b);
}


执行这段代码 输出的为false
想问一下是什么原因,默认Long型用==不是比较的是地址吗? 为何2种不同的情况值会不一样
...全文
52 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
xq5236870 2014-12-25
  • 打赏
  • 举报
回复
找到原因了... 这样结果的原因是Long类型内部有一个内部类,维护了一个cache, 见Long源码 552行 private static class LongCache { private LongCache(){} static final Long cache[] = new Long[-(-128) + 127 + 1]; static { for(int i = 0; i < cache.length; i++) cache[i] = new Long(i - 128); } } -128到127直接的值都放在cache里,不会创建新的对象,所以==比较的时候,结果是正确的, 当超过这个范围,因为是创建的新对象,所以自然不会相等

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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