我看过两个版本,所以我只是想知道,这两个表达式之间有什么真正的区别吗?这是传统的写作方式吗?
"hello".equals(myString)
myString.equals("hello")
编辑:我的问题的这一部分使其不重复
为什么"hello".equals(myString)
不会出错?你不希望调用者负责使用空字符串吗?通过这种逻辑,不会使用myString.equals("hello")
强制执行更清洁的代码吗?
答案 0 :(得分:3)
是的,第一个版本永远不会引发NullPointerException
,如果myString
为null
,它将返回false。
答案 1 :(得分:2)
最好的方法是第一种,因为它不能抛出异常。
如果NullPointerException
为myString
,则第二种方式会引发null
。
为什么“hello”.equals(myString)不会抛出错误?你不希望调用者负责使用空字符串吗?
你是正确的,尽可能快地检测编程错误是件好事,所以有时异常是好事。如果myString
不应该是null
,我会明确地抛出异常,而不是依赖于myString.equals("hello");
抛出异常。例如
public void someMethod(String myString) {
if (myString == null)
throw new NullPointerException();
if ("hello".equals(myString))
// do something
}
此代码完全等同于使用if (myString.equals("hello"))
,但意图更清晰,并且没有其他程序员出现的机会,没有意识到为什么你没有把文字放在第一位,并且交换它。 / p>