运行代码如下:
/**
* @author yh
* @date 2021/12/17 16:52
**/
public class Chapter10 {
public static void main(String[] args) {
Integer a = 1;
Integer b = 2;
Integer c = 3;
Integer d = 3;
Long g = 3l;
System.out.println("c == d ?" + (c == d));
System.out.println("c == a + b ?" + (c == (a + b)));
System.out.println("c.equals(a + b) ?" + c.equals(a + b));
System.out.println("g == a + b ?" + (g == (a + b)));
System.out.println("g.equals(a + b) ?" + g.equals(a + b));
Integer x = 321;
Integer y = 321;
System.out.println("x == y ?" + (x == y));
}
}
打印结果如下
c == d ?true
c == a + b ?true
c.equals(a + b) ?true
g == a + b ?true
g.equals(a + b) ?false
x == y ?false
分析
- c == d == 3 :
- 在128以内,不会新建堆内存,而是修改指针指向同一个数
- g.equals(a + b):
- g 为 Long 类型,a + b 计算之后结果仍为 Integer 类型,equals() 不处理数据转型