【发布时间】:2011-08-02 11:37:43
【问题描述】:
似乎包装类的对象相等运算符会根据包装值是否在字节范围内产生不同的结果。下面是一段代码 sn-p 来演示这种行为:
System.out.println("smaller than byte");
Integer i1 = 1;
Integer i2 = 1;
if (i1 == i2) System.out.println("same");
if (i1 != i2) System.out.println("not same");
System.out.println("larger than byte");
Integer i3 = 128;
Integer i4 = 128;
if (i3 == i4) System.out.println("same");
if (i3 != i4) System.out.println("not same");
产生以下输出:
smaller than byte
same
larger than byte
not same
注意:我在 linux 上的 HotSpot (build 1.6.0_24-b07) 上得到了这个输出。 Long 和 Short 也一样(虽然还没有测试过)。
注意:Linux 下其他 HotSpot 版本的输出相同 谁能解释一下?
小修改,只是为了让它更有趣一点:
添加
if (i3 <= i4 && i3 >= i4) System.out.println("same after all...");
最后,打印“same after all...”。
【问题讨论】:
标签: java object wrapper equality