3

最近、あるコードで、それが実際に何らかの最適化やパフォーマンスに影響を与えているのかどうか興味をそそられる何かを見ました。これは、定数ファイルの次のような行でした。

public static final Object NULL = null;

次に、コード全体で、nullキーワードを明示的に使用するのではなく、。で参照されConstants.NULLます。

私は前にこの種のものを見たことがあります:

public static final String EMPTY_STRING = "";

""...そして、それが多数の重複インスタンスの作成を回避する試みである場合、それは少なくとも少し意味があるように思われました。しかしnull、それは実際にはどんな種類のオブジェクトでもないので、それは本当に何か違いがありますか?足りないものはありますか?

4

4 に答える 4

4

どちらも意味がありません。コード内の複数の場所で使用""しても、Stringオブジェクトの複数のインスタンスは作成されません。JVMを明示的に呼び出さない限りnew String("");、文字列のプールを作成し、特定の各文字列の1つのインスタンスを参照します。

于 2013-01-30T17:41:09.263 に答える
3

NULLこのように定義して使用することは、ノイズを追加するだけではないと思います。おそらく、そのコードを書いた人は誰でもC ++のバックグラウンドから来ており、より馴染みのある外観を好みましNULLnull

2番目の例も疑わしいです。""何回も使用しても、String使用ごとに個別のオブジェクトが作成されるわけではないからです。JLSを引用するには:

さらに、文字列リテラルは常にクラスの同じインスタンスを参照しますString。これは、文字列リテラル(またはより一般的には定数式(§15.28)の値である文字列)が、メソッドを使用して一意のインスタンスを共有するように「インターン」されるためString.internです。

于 2013-01-30T17:38:45.177 に答える
0

Object.NULLを使用する目的があります。

オブジェクトがnullであるかどうかを検証する一連のコードがあるとします。そのため、新機能の一部として、nullオブジェクトの場合にはデフォルト値を使用する必要があります。

単純なifobj!= nullでは、オブジェクトがnullに対して検証される場所を追跡することはできません。ただし、obj!= Object.NULLを使用する場合は、IDE/エディターを使用してそれらの使用法を見つけることができます。

于 2020-06-20T13:43:15.793 に答える
-1

Javaの文字列プールの概念により、占有されるメモリに違いはありません。また、nullの代わりにNULL定数を使用したり、 ""の代わりにEMPTY_STRINGを使用したりすると、コードがよりダーティに見えます。

どちらも自明であるため、名前付け定数を作成する必要はありません。

于 2013-01-30T18:03:26.847 に答える