文字列リテラルでequalsを呼び出す 質問する

文字列リテラルでequalsを呼び出す 質問する

コードを少し整理していたところ、次のような部分がありました:

String saving = getValue();
if(saving != null && saving.equals("true")){
   // do something
}

そこで、次のチェックを省くために、逆のことをすることを考えましたnull

if("true".equals(saving)){
   // do something
}

確かに効果はあるがこれは安全ですかそうするにはどうすればいいでしょうか? つまり、文字列リテラルは共通プールに格納されますが、作成された文字列オブジェクトはnewヒープ上にあります。しかし、定数プール内の文字列もオブジェクトですよね?

しかし、コードが短くなるとはいえ、それは正しいことではないようです。

ベストアンサー1

この質問に対する完全にバランスのとれた回答を確実に得るために、私は別の意見を投稿したいと思います。

この仕組みは愚かだと思う。

がある場合、null発生したらすぐに知る必要があります。隠すと発見が遅れるだけです。 がnull例外でない場合は、別のものに置き換えてください。

このアプローチを採用すると、コードが強化され、防御プログラミングあなたの間違いが発見される場所できるだけ早くすべてが崩壊するまで隠蔽するよりも。

要約すると、はNullPointerExceptionあなたの友達です。コードの間違いを見つけるために使うべきです。とても使いやすい空のなどのオブジェクトは例外ではないCollections.emptySet()と判断されたら、null

習慣的にヨーダテクニックを使用すると、隠すつもりのないエラーが必然的に隠れてしまいます。ないこれを使用すると、エラーがかなり早く明らかになります。私にとっては、これは絶対にこれを使用しない十分な理由です。

私にとって - 使用

if(saving != null && saving.equals("true")){

savings私が実際に許可したいことnull、そしてそれが許容できる状況であることを意味します -

if("true".equals(saving)){

意図的な選択を単に隠すだけであり、それが悪い習慣になる可能性がある。

おすすめ記事