Java “的好处是什么?”;字符串";。等于(其他字符串)
在一个教程(用于实现xml解析器)中,我看到了以下代码:Java “的好处是什么?”;字符串";。等于(其他字符串),java,string,Java,String,在一个教程(用于实现xml解析器)中,我看到了以下代码: if( "NODENAME".equals(xmlreader.getNodeName()) ) { // getNodeName() returns java.lang.String ... } 有理由写这样的字符串比较吗 这可能是某种最佳/错误的实践或类似的代码,可能会带来一些性能优势。我想知道我是否应该在商业项目中使用它 方法equals()检查字符串的内容。 在literal上调用equals()方法可以避免NullPoin
if( "NODENAME".equals(xmlreader.getNodeName()) ) { // getNodeName() returns java.lang.String
...
}
有理由写这样的字符串比较吗
这可能是某种最佳/错误的实践或类似的代码,可能会带来一些性能优势。我想知道我是否应该在商业项目中使用它 方法equals()
检查字符串的内容。
在literal上调用equals()
方法可以避免NullPointerException
,如果xmlReader.getNodeName()
返回null
,则可能会发生这种情况。在null
上调用equals
方法将导致NullPointerException
,从而避免出现NullPointerException。
用于解决不安全的空行为。
在编程行话中,Yoda条件(也称为Yoda表示法)是一种编程风格,其中表达式的两部分在条件语句中颠倒
优势在于
交换两个条件值不会更改程序的行为。一个常见的错误是意外地赋值,而不是编写条件语句
它被称为a,用于避免NullPointerException
。关于它在商业项目中的使用,这实际上是一个设计决策——一些开发人员希望受到保护,不受空值的影响,而其他人则希望使用传统符号提供的快速失效机制。如果您有代码:
if( "NODENAME".equals(xmlreader.getNodeName()) ){...}
当xmlreader.getNodeName()
为null
时,它将避免NullPointerException
"NODENAME".equals(null)
将返回false,而不是NullPointerException
PS:请记住,如果出于某种原因xmlreader
本身为空,则:
"NODENAME".equals(xmlreader.getNodeName())
仍然可以抛出NullPointerException
通常编写字符串比较是为了避免NullPointerException
如果xmlreader.getNodeName()
为null,那么您就必须
if("NODENAME".equals(null)) {
// ...
}
相比
if(null.equals("NODENAME")) {
// ...
}
我会扔的
这称为尤达条件:
如果您希望xmlreader.getNodeName()
为null
,那么这没关系,否则我不会依靠它来避免抛出异常,您应该在代码的前面处理它。如果您觉得还可以使用=
比较字符串,那么即使在比较过程中涉及两个“有意义的”相等字符串,它也会失败,因为=
会检查它是否是同一个对象。当然,正如其他答案所述,如果在标准字符串上调用equals,则可以避免出现NullPointeException
。由于equals是java中的内置方法,我们需要确保应该使用object而不是null来调用它。所以,如果我们用null调用,那么我们将以null指针异常结束
Ex:假设我需要检查字符串a是否等于“hai”,并且a是否来自用户。
那么我不确定“a”是否为空。因此,如果我使用a.equals(“hai”)
那么如果a变为null,那么它是不安全的,但是如果你反向比较,那么无论a是否为null,它总是安全的
因此,请始终选择
“hai”.equals(a)
以避免空指针异常。如果(常量==变量)有时被称为Yoda条件,请阅读这里的。它可以用来避免Java中出现诸如constant=variable
或NullPointerExceptions
之类的打字错误。我认为最好也列出使用Yoda条件的缺点?加上1表示可爱的Yoda图片