文字字符串方法与对象方法

Literal String methods versus Object methods

这两个版本我都看过,所以我只是想知道,这两个表达之间有什么真正的区别吗?常规的写法是什么?

"hello".equals(myString)
 myString.equals("hello")

编辑:我的问题的这一部分不是重复的

为什么 "hello".equals(myString) 不抛出错误是件好事?您不希望调用者负责使用空字符串吗?按照这个逻辑,使用 myString.equals("hello") 不会强制执行更清晰的代码吗?

是的,第一个版本永远不会引发 NullPointerException,如果 myStringnull,它将 return false。

最好的方法是第一种,因为它不会抛出异常。

如果 myStringnull,第二种方法抛出 NullPointerException

Why is it good that "hello".equals(myString) doesn't throw an error? Wouldn't you want the caller to be responsible for using a null string?

您说得对,尽快检测到编程错误是一件好事,所以有时异常是一件好事。如果 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")),但意图更明确,并且不会有其他程序员出现,没有意识到你为什么不把文字放在第一位,然后交换它.