在if语句中比较字符串:!string.equals("")和!"".equals(string)的区别。

4

可能重复问题:
这两种条件的区别是什么?

我正在进行一些代码清理,NetBeans建议将

if(!billAddress1.equals("")) 改为 if (!"".equals(billAddress1)).

这两者之间有什么区别,使用建议版本的优势在于什么,而且如何保证原始版本的易读性?


1
请参考此帖子:https://dev59.com/omrWa4cB1Zd3GeqP7Biu#13084072 - Rohit Jain
添加此问题:https://dev59.com/5mkw5IYBdhLWcg3wbqKZ - hmjd
好像我已经得到了这个问题的明确答案 :) 谢谢大家,最短时间过后我会接受答案。 - Robert H
有这么多“同等地”正确的答案;)) - Serg
6个回答

8
如果`billAddress1`是`null`的话,billAddress1.equals("")会导致空指针异常,而"".equals(billAddress1)则不会。在这里,"".equals(billAddress1)是更好的选择。

3
// Could cause a NullPointerException if billAddress1 is null
if(!billAddress1.equals(""))

// Will not cause a NullPointerException if billAddress1 is null
if (!"".equals(billAddress1))

3

!"".equals(billAddress1)永远不会引起NPE,因此它允许通过允许摆脱否则需要的billAddress1 == null 来实现更紧凑的语法。


2
后者如果值为null,则不会导致空指针异常。

2

正如其他人所指出的那样,使用它可以避免NPE。但是,如果您确定它不会为null,则更好的检查字符串是否为空的方法是使用String.isEmpty()方法,这似乎是代码尝试做的事情。


1

第一个可能会导致NullPointerException。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接