Integer a= 1;
Integer b =2;
Integer c= 3;
Integer d = 3;
Integer e = 321;
Integer f = 321;
Long g = 3L;
System.out.println(c==d);
System.out.println(e==f);
System.out.println(c == (a+b));
System.out.println(c.equals(a+b));
System.out.println(g == (a+b));
System.out.println(g.equals(a+b));
运行结果为:
true
false
true
true
true
false
前两个是因为在自动装箱时对于值从-128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用
中间两个是因为包装类的“==”运算在不遇到算数运算的情况下不会自动拆箱
后两个是因为equals()方法不处理类型的转换问题。