java,字符串,判断为空的问题。

public static String formatNull(String str) {
    return null == str || "null".equals(str) ? "" : str;

}
公司格式化字符串为什么这样写?

楼主试试System.out.println(null=="null");这个是true还是false。应该就明白null == str || "null".equals(str)为什么不写一个"null".equals(str)了

这不就是个三目表达式,这样做代码量少,简单明了。应了那句老话'write less,do more'!

return null == str || "null".equals(str) ? "" : str;
分解下,就是return [A块语句]?[B块语句]:[C块语句]
A块语句判断,true返回B块语句,false返回C块语句
A块语句就是null == str || "null".equals(str)
B块是“”
C块是str
这是三元表达式的用法。在公司项目里,很经常见到这种表达式的,因为写起来简单,而且易懂。不需要那么多的if和else,减少代码量

就是简单的三元表达式 比如 1>2 ? 0 : 1; 意思就是 1>2 为true返回0 为false 则返回1

就是说如果str是空或者str的值是null 就把它的值赋为空串,否则的话就不改变str的值

要知道为什么这么写,先要知道运算符优先级http://blog.csdn.net/xionglangs/article/details/50467340,之后再来看这个问题,这里有3个运算符,可以==,||,?:,它们三个的优先级是==>||>?:所以返回值是先判断null == str是不是为true,之后判断(null == str||"null".equals(str))是不是为真,如果是true那么返回值就是“”,如果是false,返回值就是str。也可以写成((null==str)||("null".equals(str)))?"":str;