3

私は C#.net のバックグラウンドから来て、文字列を持っているときはいつでも次のように宣言していましたString.Empty 。今、同僚からの Java コードを見ていると、彼は次のようなメソッドで自分の文字列を宣言しています。

String myStr = null;

私はそれが好きではありません。さらに悪いことに、彼は「IF」ブロックでこれらの文字列に値を割り当てていmyStr.length()ます。

だから私の質問は、Javaで推奨される方法は何ですか? それらを as として定義するか、String.Emptyそのままにして、呼び出す直前にチェックnullを行う方がよいと思いますか?null.length()

4

4 に答える 4

5

一般にnull、特にメソッドから値が返されたり、別のメソッドに渡されたりする場合は、値を使用することはお勧めできません。Null オブジェクト パターンを使用する方が優れており、文字列の場合、Null オブジェクトは空の文字列です。null を一貫して回避することで、NullPointerException が発生する可能性が小さくなり、コードが読みやすくなります (これについては、Clean Codeの第 7 章の 110 ~ 112 ページで詳しく説明しています)。

JavaString s = ""では、JVM が文字列リテラルをインターンするため、メモリを割り当てません。したがって、パフォーマンスの違いさえありません (たとえあったとしても、時期尚早の最適化になります)。

于 2012-07-30T22:31:26.603 に答える
4

どちらにも用途があります。空の文字列は帯域内です。つまり、入力で発生する可能性があるため、センチネルとしては使用できません。Null は、センチネルとしてのみ役立ちます。それに追加する場合は、もちろん "" で初期化する必要があります。すぐに再割り当てする場合は、値を指定する必要はまったくありません。おそらく、宣言と再割り当てを組み合わせる必要があります。私はこれをあまりにも多く見ています:

String s = new String();
s = "some string";

これは、誰かがその言語を理解していないということだけを教えてくれます。

于 2012-07-30T23:04:11.923 に答える
3

どちらもさまざまなシナリオに適用できると考えられていましたが、null を割り当てる方が適切です (メモリを節約し、エラーが発生しにくくなります)。後で文字列を設定すると、null ポインター例外が発生します。

于 2012-07-30T22:24:48.730 に答える
2

空の文字列は、多くの場合、StringBuilder追加する場合に を使用する必要があることを示しています (これは一般的なケースです)。参照は、使用するnullメモリが少なく、文字列が空かどうかを確認するよりも null かどうかを確認する方が高速であるため、「より良い」です。null として宣言する代わりに空の文字列を使用しないことをお勧めしますが、ある段階で値が割り当てられていることが 100% 確実でない限り、使用する前に null 参照を確認する必要があります。

于 2012-07-30T22:09:25.470 に答える