在Java Boolean.TRUE方法具有以下实现
/**
* The {@code Boolean} object corresponding to the primitive
* value {@code true}.
*/
public static final Boolean TRUE = new Boolean(true);
现在:
System.out.println(new Boolean(true) == new Boolean(true));
System.out.println(Boolean.TRUE == Boolean.TRUE);
指纹:
false
true
为什么?!
Boolean.TRUE
不是一个方法,而是一个成员变量声明。
public static final Boolean TRUE = new Boolean(true);
每当您使用运算符new
它都会创建一个新的实例和运算符==
比较实例引用而不是它们的内容(equals
比较内容(,这意味着下面比较两个不同的实例引用而不是它们的内容,因此它的false
。
new Boolean(true) == new Boolean(true)
由于Boolean.TRUE
对于Boolean
包装类是静态的,下面意味着您正在比较相同的静态变量(不是它们的内容,而是实际的实例引用(,因此它的true
。
Boolean.TRUE == Boolean.TRUE