在 Java 中,基本类型的比较就是值的比较;引用类型的相等就是看引用的对象是否相等(地址是否相同)。
【基本类型】
- 浮点数最好不用
==
,而用绝对值 Double.NAN == Double.NAN
的结果是false
boolean
无法与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"); // true
System.out.println(Other.hello == hello); // true
System.out.println(hello == ("Hel" + "lo")); // true, 编译的时候就会被合并为 "Hello"
System.out.println(hello == ("Hel" + lo)); // false, 变量 + 常量 = 变量(引用)
System.out.println(hello == new String("Hello")); // false
System.out.println(hello == ("Hel" + lo).intern()); // true