比较字符串的不同方法

3
我在Github上浏览代码时发现有人使用这种方式来比较两个字符串。
if ("whatever".equals(theString))

普通的字符串比较方式和其他方法有什么区别?

if (theString.equals("whatever"))

那么上面的方法呢?

我不确定是否之前有类似的问题被问过,如果有的话,请见谅。


3
theString.equals("whatever") 可能会抛出 NullPointerException 异常。 "whatever".equals(theString) 不会。 - Eran
谢谢您的快速回复 ;) - Jeremy
2
被称为Yoda符号 - fabian
https://docs.oracle.com/javase/8/docs/api/java/util/Objects.html#equals-java.lang.Object-java.lang.Object- - Lyubomyr Shaydariv
@Jeremy 这个问题和你能想到的任何问题一样,已经被问过并回答了数百次。学会搜索信息。 - Kayaman
显示剩余2条评论
2个回答

7

if("无论什么".equals(theString))的优势在于如果 theStringnull,你不会遇到NullPointerException。其余部分相同。


2
正如其他人指出的那样,Yoda符号用于避免可能的NPE。然而,我并不认为在代码中隐藏潜在的bug是一个优点。
使用
"whatever".equals(theString)

不会抛出NPE,但你可能认为一切都按预期工作。想象一下这样的情况:你没有初始化字符串并将其设置为null,你的代码不会崩溃,条件将被评估为false。

如果null表示某些事情,你应该检查它并适当地处理:

if (theString == null) {
    // log, initialize or whatever
}

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