System.out中的三元运算符

use*_*655 2 java

我在下面sysout的项目中找到它并且它总是打印'Not Null'.即使我已初始化Val变量,它也会打印'Not Null'.

还有为什么它不在前面打印"mylog"?谁能解释一下?

String Val = null;
System.out.println("mylog : " + Val!=null ? "Not Null" :"Is Null");
Run Code Online (Sandbox Code Playgroud)

Grz*_*zki 7

使用paranthesis:

   System.out.println("mylog : " + (Val!=null ? "Not Null" :"Is Null"));
Run Code Online (Sandbox Code Playgroud)

否则它被解释为:

  whatToCheck = "mylog: " + val
  System.out.println(whatToCheck !=null ? "Not Null" : "Is Null"
Run Code Online (Sandbox Code Playgroud)

其评估结果类似于"mylog:null"或"mylog:abc".这始终是一个非null的String.


Mar*_*oun 7

"mylog : " + Val!=null 
Run Code Online (Sandbox Code Playgroud)

将被评估为

"mylog : null"
Run Code Online (Sandbox Code Playgroud)

不是null.

救援的括号.

为什么null转换为字符串"null"?请参阅JLS - 15.18.1.1字符串转换:

...如果引用null,则将其转换为字符串 "null"

此外,了解由于Java运算符优先级而发生这种情况非常重要.