我在项目中找到sysout
以下,并且始终打印“不是空”#。即使我已经初始化了Val
变量,也就是打印“不是空”#。
也是为什么不打印" mylog"在前?谁能解释一下?
String Val = null;
System.out.println("mylog : " + Val!=null ? "Not Null" :"Is Null");
答案 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