@Test public void testEquals() {
Short num1 = 1;
Integer num2 = 1;
Long num3 = 1L;
System.out.println(num1.equals(num2)); //false
System.out.println(num2.equals(num3)); //false
}
三,案例分析
猜猜下面各个输出的结果是什么:
@Test public void test1() {
Integer a = 1;
Integer b = 2;
Integer c = 3;
Integer d = 3;
Integer e = 321;
Integer f = 321;
Long g = 3L;
Long h = 2L;
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));
System.out.println(g.equals(a + h));
}
其中会涉及到拆箱与装箱(自行弄懂)的问题.针对个别解析如下:
c==(a+b) :a+b 都会拆箱成 int 然后相加,所以 c 也会自动拆箱比较.
g==(a+b):同理,a+b 都会拆箱成 int 然后相加,g 会拆箱成 long 类型.所以基本类型比较只要比较其值即可.
g.equals(a+b):先拆箱 a+b 再装箱还是 Integer,这里不会自动转型.Long 类型的 equals 判断不是同一类型直接返回 false
g.equals(a+h):同上, 先拆箱 a+h 再装箱(这里会自动向上转型)为 Long, 所以同类型的比较值又相等,这里返回 true.
最终结果如下:
true
false
true
true
true
false
true
来源: https://www.cnblogs.com/yuanfy008/p/8321217.html