运行代码如下:

/**
 * @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

分析

  1. c == d == 3 :
  • 在128以内,不会新建堆内存,而是修改指针指向同一个数
  1. g.equals(a + b):
  • g 为 Long 类型,a + b 计算之后结果仍为 Integer 类型,equals() 不处理数据转型