关于java中类型转换的奇怪之处

时间:2015-02-27 11:05:00

标签: java

我最近在java中遇到一个奇怪的问题,无法弄清楚它是如何工作的。请帮帮我。

(Integer)100 == (Integer)100  works by returning true
(Integer)200 == (Integer)200  doesn't works returns false why?

1 个答案:

答案 0 :(得分:4)

(Integer)100 == (Integer)100工作的原因是Integer类使用IntegerCache来维护-128到127之间的缓存值。所以如果你输入cast 100,它会一次又一次地获得同一个对象,因此Integer会引用两个是一样的。

现在(Integer)200 == (Integer)200因为它超出了缓存中维护的值范围,所以每次都会得到一个新对象,因此引用与您尝试与“==”进行比较时不同。

当你输入case整数原语作为包装器时,内部调用将路由器转换为valueOf方法,并提到here的详细信息。