java - System.out.println 在打印计算结果为 boolean 值的内容时没有执行我所期望的操作

标签 java

我不确定如何描述我的标题问题,所以这是我的代码:

public class NullLogic {

    public static void main(String[] args) {
        NullLogic nl = new NullLogic();

        System.out.println("nl.getNull()  = " + nl.getNull() );

        System.out.println("nl.getNull() == null  = " + (nl.getNull() == null) );
        System.out.println("nl.getNull() == null  = " + nl.getNull() == null );


    }


    private String getNull() {
        return null;
    }

}

这是输出:

nl.getNull()  = null
nl.getNull() == null  = true
false

好的——第一行没问题,正是我所期望的。 第二行也不错。

现在我在第三行遇到了问题,我知道计算结果为 boolean 值的语句应该放在括号中,但我认为我应该得到运行时错误或其他错误,而不是成功执行抑制字符串系统输出的一部分。

这是怎么回事?

这不是我需要解决的严重问题,但我不知道这里发生了什么,我想知道。

谢谢!

最佳答案

System.out.println("nl.getNull() == null  = " + nl.getNull() == null )

评估为

System.out.println(("nl.getNull() == null  = " + nl.getNull()) == null )

即,首先连接两个 String(第一个不为 null - "nl.getNull() == null = ",第二个为 >null,但即使两者都是 null,将它们连接起来也会产生一个非 null String)。

此连接的结果是字符串:“nl.getNull() == null = null”

然后将 "nl.getNull() == null = null"null 进行比较,其计算结果为 false

关于java - System.out.println 在打印计算结果为 boolean 值的内容时没有执行我所期望的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47875219/

相关文章:

java - 我如何根据此为瓷砖着色?

java - 如何从订阅者返回 Observable?

java - 我使用 Jersey 生成了 400 响应,但没有得到返回

java - 发送多个参数到reducer-MapReduce

java - 为并发 GC 指定额外的 GC 有什么意义吗?

java - Eclipse:无法在 jar 文件类中查看静态方法的局部变量

java - 递归回文测试不能包含特殊字符

java - Spock-Test-Framework 中的 Mock-Signature 似乎与文档中的不同

java - 当在 JTree Location 之外发生 Focus Lost 或 Left Click 时,如何使 JTree 停止单元格编辑?

java - CQRS/ES - 处理投影错误