编程语言还是比较傻的。
我们在数学中,123 == 123 , 直觉上是一目了然的。但是到了计算机编程语言中, 问题就显得有点“傻瓜”化了。
值得一提的下面的表达式:
new Long(10).equals(new Integer(10))
始终是 false,这确实是一个违背数学常理的“坑”。
再比如,在Java中
static void test2() {
// Integer的自动拆装箱的陷阱(整型数-128到127的值比较问题)
out.println("-------------------");
Integer x = new Integer(123);
Long y = new Long(123);
//out.println(x == y); // Error:(43, 23) java: incomparable types: java.lang.Integer and java.lang.Long
out.println(x.equals(y)); // false
out.println("-------------------");
Integer c = Integer.valueOf(128);
Long d = Long.valueOf(128);
//System.out.println(c == d);//Error:(49, 30) java: incomparable types: java.lang.Integer and java.lang.Long
System.out.println(c.equals(d)); // false
<