在 Java 中,基本类型的比较就是值的比较;引用类型的相等就是看引用的对象是否相等(地址是否相同)。

    【基本类型】

    • 浮点数最好不用 == ,而用绝对值
    • Double.NAN == Double.NAN 的结果是 false
    • boolean 无法与 int 相比较

    引用类型

    1. Integer i = new Integer(10);
    2. Integer j = new Integer(10);
    3. System.out.println(i == j); // false,因为对象有两个
    4. Integer m = 10;
    5. Integer n = 10;
    6. System.out.println(m == n); // true,因为对象有缓存
    7. Integer p = 200;
    8. Integer q = 200;
    9. System.out.println(p == q); // false,因为对象是两个

    在上例中, mn 实际上是通过 Integer.valueOf() 函数进行装箱,将 int 转换为 Integer 。但是在 Java 中,数值在 **-128 ~ +127** 之间的数有缓存(Java 认为这样的数可能经常用)。
    image.png
    image.png

    1. String hello = "Hello", lo = "lo";
    2. System.out.println(hello == "Hello"); // true
    3. System.out.println(Other.hello == hello); // true
    4. System.out.println(hello == ("Hel" + "lo")); // true, 编译的时候就会被合并为 "Hello"
    5. System.out.println(hello == ("Hel" + lo)); // false, 变量 + 常量 = 变量(引用)
    6. System.out.println(hello == new String("Hello")); // false
    7. System.out.println(hello == ("Hel" + lo).intern()); // true