“String”.equals(otherString)有什么好处

时间:2013-09-04 10:10:58

标签: java string

在教程中(用于实现xml解析器)我看到了以下代码:

if( "NODENAME".equals(xmlreader.getNodeName()) ) {  // getNodeName() returns java.lang.String
... 
}

有没有理由写这样的字符串比较?

这可能是某种最佳/不良做法或类似代码可能会带来一些性能上的好处。我想知道我是否应该在商业项目中使用它。

7 个答案:

答案 0 :(得分:9)

这使您免于NullPointerException.

Yoda Condition 用于解决不安全的空行为。

  

在编程术语中,Yoda Conditions(也称为Yoda Notation)是一种编程风格,其中表达式的两个部分在条件语句中相反。

优势是

  

交换两个条件值不会改变程序的行为。常见的错误是意外地分配值而不是编写条件语句。

答案 1 :(得分:2)

它被称为Yoda condition,用于避免NullPointerException。关于它在商业项目中的使用,这实际上是一个设计决策 - 一些开发人员希望受到保护而不受空值的影响,而其他人希望想要传统符号提供的失败快速机制。

答案 2 :(得分:2)

如果你有代码:

if( "NODENAME".equals(xmlreader.getNodeName()) ){...}

NullPointerException xmlreader.getNodeName()以来{/ 1}}将会避免null

"NODENAME".equals(null)

将返回false而不是NullPointerException

PS:请注意,如果由于某种原因xmlreader本身为空,则:

"NODENAME".equals(xmlreader.getNodeName())

仍然可以抛出NullPointerException

答案 3 :(得分:2)

通常字符串比较是这样写的,以避免NullPointerException如果xmlreader.getNodeName()为空,因为那时你会有

if("NODENAME".equals(null)) {
    // ... 
}

相比
if(null.equals("NODENAME")) {
    // ... 
}

将被抛出。

这叫做尤达条件:

enter image description here

如果您希望xmlreader.getNodeName()null,那么它没问题,否则我不会依赖此来避免抛出异常,您应该在之前处理它你的代码。

答案 4 :(得分:0)

方法equals()检查String的内容。 在文字上调用equals()方法会使NullPointerException xmlReader.getNodeName()null返回equals时可能会发生这种情况。在null上调用NullPointerException方法将导致{{1}}

答案 5 :(得分:0)

如果您的印象是您也可以使用==比较字符串,那么即使在比较中涉及两个“有意义”相等的字符串,它也会失败,因为==检查它是否是相同的对象。当然,正如其他答案所述,如果您在标准字符串上调用等号,则可以避免使用NullPointeException

答案 6 :(得分:0)

由于equals是java中的内置方法,我们需要确保它应该使用object而不是null来调用。因此,如果我们使用null调用,那么我们将以Null指针异常结束。

例如:假设我需要检查字符串a是否等于“hai”而a是否来自用户。

然后我不确定'a'是否为null。所以,如果我使用a.equals("hai"),那么如果a变为空则它不安全但是如果你反转比较那么无论a是否为空它总是安全的。

所以总是更喜欢"hai".equals(a)来保护空指针异常。