1. ホーム

[解決済み】なぜJavaにはString.Emptyがないのですか?[クローズド]

2022-03-30 02:47:17

質問

文字列リテラルを入力する度に "" の場合、文字列プールで同じStringオブジェクトが参照されます。

しかし、なぜString APIには public static final String Empty = ""; への参照を使用することができます。 String.Empty ?

少なくとも、コンパイラは既存のStringを参照することがわかり、再利用のためにすでに作成されているかどうかをチェックする必要がなくなるので、コンパイル時間が短縮されますよね?また、個人的には、文字列リテラル、特に小さな文字列の増殖は、多くの場合、quot;code smell"であると考えています。

では、String.Emptyがないのには、何か大きな設計上の理由があったのでしょうか?それとも、単に言語開発者が私の意見に共感しなかったのでしょうか?

どうすればいい?

String.EMPTY は12文字であり "" は2つで、どちらも実行時にメモリ上のまったく同じインスタンスを参照することになります。私は、なぜ String.EMPTY の方がコンパイル時の手間が省けるので、実際は後者だと思います。

特に考慮すべきは String は不変なので、空の文字列を取得して、それに対して何らかの操作を行うことはできません。 StringBuilder (または StringBuffer スレッドセーフにしたい場合は、それをStringに変換してください。

更新

質問に対するコメントから

このきっかけとなったのは、実は TextBox.setText("");

あなたの適切なクラスで定数を提供することは、全く正当なことだと思います。

private static final String EMPTY_STRING = "";

そして、それをコード内で次のように参照します。

TextBox.setText(EMPTY_STRING);

この方法では、少なくとも、IDEなどでStringを埋め忘れたのではなく、空のStringが必要であることが明示されます。