System.out中的三元运算符

时间:2014-10-13 11:28:35

标签: java

我在项目中找到sysout以下,并且始终打印“不是空”#。即使我已经初始化了Val变量,也就是打印“不是空”#。

也是为什么不打印" mylog"在前?谁能解释一下?

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

4 个答案:

答案 0 :(得分:7)

使用括号:

   System.out.println("mylog : " + (Val!=null ? "Not Null" :"Is Null"));

否则它被解释为:

  whatToCheck = "mylog: " + val
  System.out.println(whatToCheck !=null ? "Not Null" : "Is Null"

评估为“a log:null”或“mylog:abc”之类的内容。 这始终是非空字符串。

答案 1 :(得分:7)

"mylog : " + Val!=null 

将被评估为

"mylog : null"

不是null

救援的括号。

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

  

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

同样非常重要的是要理解这是因为Java operator precedence而发生的。

答案 2 :(得分:3)

在表达式周围使用括号:

System.out.println("mylog : " + (Val!=null ? "Not Null" :"Is Null"));

答案 3 :(得分:0)

按照以下方式检查:

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

输出

mylog : Is Null