StringUtils.EMPTY
代わりに使用します""
か?
つまり、戻り値として、またはString変数の値を設定した場合です。比較するつもりはありません。StringUtils.isEmpty()
回答:
もちろん違います。「」は十分に明確ではないと思いますか?
定数には基本的に3つの使用例があります。
ここでは適用されません。
EMPTY
は、空の文字列自体にはない意味はありません。特に、その特定のケースでなぜ空の文字列を使用することにしたのかは文書化されていません。定数に名前を付けてONE
、値の代わりにその定数を使用することに意味があると偽ることは変わりません。
StringUtils.EMPTY
リテラルを非表示にし、それreturn StringUtils.EMPTY
が完全に予期されていて、空の文字列が返されるはずであることを表現するためにを使用すると、簡単に別のものに変更でき、これはおそらく間違いで""
あるという仮定につながる可能性""
があります。EMPTY
より表現力があると思います。
StringUtils.EMPTY
少ないより表現力""
。
""
を使用するよりも表現力がStringUtils.EMPTY
あり、あなたの言ったことは私の考えを変えていません。開発者が空の文字列リテラルを非常にまれに誤って書き込んだと私は信じることができます。 )個人的にはバグ。
いいえ、使用します""
。
文字通り""
水晶のようにはっきりしています。何を意味するのかについて誤解はありません。そのためにクラス定数が必要になる理由はわかりません。この定数はのStringUtils
代わりにを含むパッケージ全体で使用されていると想定することができます""
。ただし、それを使用する必要があるわけではありません。
歩道に岩がある場合は、投げる必要はありません。
「」は確かに空の文字列であり、(誤って?)Unicodeのすばらしい非表示の非スペーシング文字が含まれていないと盲目的に思い込んでいる人がどれほど多くの人に喜んでいるかに驚いています。善良なものすべてを愛するために、できる限りEMPTYを使用してください。
String
インターンとクラスの初期化について話している人がいないので、ここに2セントを追加します。
String
Javaソース内のリテラルは、抑留作っている任意の ""
と同じオブジェクトStringUtils.EMPTY
StringUtils.EMPTY
canを使用するとStringUtils
クラスを初期化できます(JLSはその時点で固有です)。ただし、これは最終的なものであるため、クラスを初期化しません。EMPTY
final
org.apache.commons.lang3.StringUtils.EMPTY
JLS 12.4.1を参照して、文字列のインターニングとクラスの初期化に関する関連する回答を参照してください。
StringUtils
。
return "";
より短いので、私はそれを実際に使用するのは好きではありませんreturn StringUtils.EMPTY
。
ただし、これを使用することの1つの誤った利点は、のreturn " ";
代わりに入力するとreturn "";
、(空の文字列を正しくテストするかどうかに関係なく)異なる動作が発生する可能性があることです。
""
ありません。同じリテラル文字列を複数回入力するのは、たまに一度だけでも嫌です。Constants.javaで定数を宣言したいのですが、ソースコードのすべての場所で定数を繰り返すのではありません。
return "";
醜いです、私が好むリターンを使用するようにStringUtil.EMPTY
(自分のクラスで宣言さStringUtil、NOT ApacheののStringUtils)。
クラスがコモンズの他のものを使用しない場合は、この魔法の値のためだけにこの依存関係があるのは残念です。
StringUtilsの設計者はこの定数を多用していますが、これは正しいことですが、それを使用する必要があるという意味ではありません。
正直なところ、どちらもあまり使われていません。空の文字列と比較したい場合は、StringUtils.isNotEmpty(..)
StringUtils.isNotEmpty(..)
また、nullcheckを実行するため、空の文字列と比較することとはまったく同じではありません。
null
ますか?の2番目の引数としてequals
、ただし結果は同じになりますfalse
isNotEmpty
はの反対な"".equals(…)
ので、null
空の文字列のように処理されるという事実は、空の文字列と比較するのとは異なります、"".equals("")
→ true
、"".equals(null)
→ false
、StringUtils.isNotEmpty("")
→ false
、StringUtils.isNotEmpty(null)
→ false
。あなただけの文字列が空で、使用であるかどうかを知りたい場合はstring.isEmpty()
帰国の権利行動持って、true
それが空の文字列である場合に限っと投げNullPointerException
文字列がある場合null
...
StringUtils.EMPTY
読みやすくするために役立つ場合があります。特に:
三元演算子。
item.getId() != null ? item.getId() : StringUtils.EMPTY;
また、定数を使用することにより、への参照StringUtils.EMPTY
が作成されます。それ以外の場合""
、JVMが文字列リテラルをすでに文字列プールに存在するかどうかを確認する必要があるたびに文字列リテラルをインスタンス化しようとする場合(そうなる可能性が高いため、追加のインスタンス作成オーバーヘッドはありません)。確かに使用StringUtils.EMPTY
すると、文字列プールをチェックする必要がなくなりますか?
StringUtils.EMPTY
定数はコンパイル時に解決されると記載されています。
StringUtil.EMPTY
コンパイル時定数であり、それへの参照を使用するのとまったく同じバイトコードにコンパイルされます""
直接。さらに、なぜ三項演算子が違いを生むのかわかりません。他と同じような表現です。名前付き定数を使用する、または使用しない理由は、3項演算子にも適用されます。
いいえ、もっと書く必要があるので。そして、空の文字列plattform独立しており、空(Javaで)。
File.separator
「/」または「\」よりも優れています。
しかし、好きなようにしてください。あなたはのようなタイプミスを得ることができませんreturn " ";
someString.isEmpty()
代わりに書く理由です。
はい、それは理にかなっています。それが唯一の方法ではないかもしれませんが、これは「理にかなっていない」という言い方はほとんどわかりません。
私の考えでは:
It will still require changing everywhere if you don't define your own variable and use it in multiple places.
空の文字列を別の空の文字列に変更しますか?
StringUtils.EMPTY
。空の文字列の使用が意図されたものであり、ある種の遅延ではないことを明確にします(「これは文字列が必要です、渡しましょう""
」)。誰かがこのコードに当たった場合、変更を加える前によく考えます。また、StringUtils.EMPTY
などの独自の変数として定義されている場合、MyClass.EMPTY
「その空の表現」に変更を加えるには、コードの1行を変更する必要があります。たとえば、"<empty>"
空のStringの代わりに変更でき""
ます。しかし、これは少し行き過ぎだと思います。