4

チュートリアル(xmlパーサーを実装するため)で、次のコードを見ました:

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

そのような文字列比較を書く理由はありますか?

これは、ある種のベスト/バッド プラクティスまたはコードのようなもので、パフォーマンスが向上する可能性があります。これを商用プロジェクトで使用する必要があるかどうかを知りたいです。

4

7 に答える 7

9

それはあなたをNullPointerException.

これは、安全でない null 動作を解決するために使用されるヨーダ条件です。

プログラミング用語では、ヨーダ条件 (ヨーダ記法とも呼ばれます) は、式の 2 つの部分が条件文で逆になっているプログラミング スタイルです。

利点は

2 つの条件値を入れ替えても、プログラムの動作は変わりません。よくある間違いは、条件文を書く代わりに誤って値を割り当ててしまうことです。

于 2013-09-04T10:12:43.003 に答える
2

コードがある場合:

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

それ以来、NullPointerExceptionそれxmlreader.getNodeName()は避けますnull

"NODENAME".equals(null)

の代わりに false を返しますNullPointerException

PS:何らかの理由xmlreaderでそれ自体が null の場合:

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

まだ投げることができますNullPointerException

于 2013-09-04T10:15:22.653 に答える
2

これはヨーダ状態と呼ばれ、回避するために使用されNullPointerExceptionます。商用プロジェクトでの使用に関しては、これは実際には設計上の決定です。一部の開発者は null 値から保護されたいと考えていますが、他の開発者は従来の表記法によって提供されるフェイル ファスト メカニズムを望んでいます。

于 2013-09-04T10:12:59.297 に答える
2

通常、文字列比較はNullPointerExceptionif xmlreader.getNodeName()is null を避けるためにそのように書かれています。

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

に比べ

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

それは投げたでしょう。

これをヨーダ条件と呼びます。

ここに画像の説明を入力

そうでない場合は、例外がスローされるのを回避するためにこれに依存することはありません。コードの早い段階で対処する必要がありますxmlreader.getNodeName()null

于 2013-09-04T10:18:36.077 に答える
0

このメソッドequals()は、の内容をチェックしますStringequals()リテラルでメソッドを呼び出すと、 return のNullPointerException場合に発生する可能性のある問題を回避できxmlReader.getNodeName()ますnullequalsメソッド onnullを呼び出すと、NullPointerException

于 2013-09-04T10:12:42.477 に答える