Literal String方法与Object方法

时间:2015-09-15 02:46:39

标签: java string-literals

我看过两个版本,所以我只是想知道,这两个表达式之间有什么真正的区别吗?这是传统的写作方式吗?

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

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

为什么"hello".equals(myString)不会出错?你不希望调用者负责使用空字符串吗?通过这种逻辑,不会使用myString.equals("hello")强制执行更清洁的代码吗?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

如果NullPointerExceptionmyString,则第二种方式会引发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>