Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “的好处是什么?”;字符串";。等于(其他字符串)_Java_String - Fatal编程技术网

Java “的好处是什么?”;字符串";。等于(其他字符串)

Java “的好处是什么?”;字符串";。等于(其他字符串),java,string,Java,String,在一个教程(用于实现xml解析器)中,我看到了以下代码: if( "NODENAME".equals(xmlreader.getNodeName()) ) { // getNodeName() returns java.lang.String ... } 有理由写这样的字符串比较吗 这可能是某种最佳/错误的实践或类似的代码,可能会带来一些性能优势。我想知道我是否应该在商业项目中使用它 方法equals()检查字符串的内容。 在literal上调用equals()方法可以避免NullPoin

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

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图片