在 Java 中,基本类型的比较就是值的比较;引用类型的相等就是看引用的对象是否相等(地址是否相同)。
【基本类型】
- 浮点数最好不用
==,而用绝对值 Double.NAN == Double.NAN的结果是falseboolean无法与int相比较
【引用类型】
Integer i = new Integer(10);Integer j = new Integer(10);System.out.println(i == j); // false,因为对象有两个Integer m = 10;Integer n = 10;System.out.println(m == n); // true,因为对象有缓存Integer p = 200;Integer q = 200;System.out.println(p == q); // false,因为对象是两个
在上例中, m 和 n 实际上是通过 Integer.valueOf() 函数进行装箱,将 int 转换为 Integer 。但是在 Java 中,数值在 **-128 ~ +127** 之间的数有缓存(Java 认为这样的数可能经常用)。

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