java,字符串,判断为空的问题。
public static String formatNull(String str) {
    return null == str || "null".equals(str) ? "" : str;

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

6个回答

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

jackelong123
jackelong123 明白了,String s="null";为了防止出现这种!一语惊醒梦中人。
3 年多之前 回复

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,减少代码量

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

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

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

jackelong123
jackelong123 但是这句代码之前,已经定义了String str; 那么null == str || "null".equals(str),这句意义何在,直接一个"null".equals(str)不就行了?
3 年多之前 回复

要知道为什么这么写,先要知道运算符优先级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;

jackelong123
jackelong123 回复编程爱好者熊浪: 我的意思是直接这样return "null".equals(str) ? "" : str;有什么问题吗?
3 年多之前 回复
xionglangs
编程爱好者熊浪 首先这只是个公共的判断字符串是否为null的方法,第二,也有个可能是查询出来的一个字符串,并不能确定它是否为null,这时候就可以通过这个方法把查询到的str作为参数,通过这个方法进行判断。
3 年多之前 回复
jackelong123
jackelong123 但是这句代码之前,已经定义了String str; 那么null == str || "null".equals(str),这句意义何在,直接一个"null".equals(str)不就行了?
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问