public static void main(String[] a) {
test1();
}
static void test1() {
// Integer的自动拆装箱的陷阱(整型数-128到127的值比较问题)
out.println("-------------------");
Integer x = new Integer(123);
Integer y = new Integer(123);
out.println(x == y);
out.println(x.equals(y));
out.println("-------------------");
Integer z = Integer.valueOf(123);
Integer w = Integer.valueOf(123);
out.println(z == w);
out.println(z.equals(w));
out.println("-------------------");
Long a = Long.valueOf(127);
Long b = Long.valueOf(127);
out.println(a == b);
out.println(a.equals(b));
out.println("-------------------");
Long c = Long.valueOf(128);
Long d = Long.valueOf(128);
System.out.println(c == d);
System.out.println(c.equals(d));
}
输出:
-------------------
false
true
-------------------
true
true
-------------------
true
true
-------------------
false
true
Java里面对处在在-128127之间的Integer值,用的是原生数据类型int,会在内存里供重用,也就是说这之间的Integer值进行==比较时只是进行int原生数据类型的数值比较,而超出-128127的范围,进行==比较时是进行地址及数值比较。
在Kotlin中,写代码的时候不再有 int, long 等基本类型,Kotlin中统一都是引用类型。