【问题标题】:Java Boolean equalityJava 布尔相等
【发布时间】:2017-12-18 12:44:30
【问题描述】:

在 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

为什么?!

【问题讨论】:

  • 一个static 字段被初始化一次,而不是在每次访问时。
  • new Boolean(true) == new Boolean(true) 正在比较对象,而不是它们的内容。
  • @user109447 - 你试过我的解决方案了吗?如果有效,请接受答案并投票!

标签: java boolean


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-01-07
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 2015-03-18
    • 1970-01-01
    相关资源
    最近更新 更多