OpenJDK では、メソッドの場合:
public static Double valueOf(double d)
javadoc には次のように書かれています:
指定された double 値を表す Double インスタンスを返します。新しい Double インスタンスが必要ない場合は、このメソッドをコンストラクター Double(double) よりも優先して使用する必要があります。このメソッドは、頻繁に要求される値をキャッシュすることで、大幅に優れたスペースと時間のパフォーマンスを実現する可能性が高いためです。
実際のコードは次のとおりです。
public static Double valueOf(double d) {
return new Double(d);
}
キャッシュは嘘です! ここで何が起こっているのですか?
ベストアンサー1
メソッドは、、、その他多くの型に存在しInteger
、Long
ドキュメントBigDecimal
は常に同じです。定義されていない状況では、メソッドできる同じ結果を返します。
私の知る限り、キャッシュは整数型に対してのみ実装されており、-128 から 127 (最も一般的な値) の間の値に対してキャッシュされたインスタンスを返します。 の場合BigDecimal
、キャッシュは現在 0 から 10 までの値に対して機能します。
Javaの後のバージョンかもしれないこの動作を他の値/より多くの型に拡張します。したがって、このコードを今日使用するのは賢明です。明日はコードが速くなる可能性があるからです (そして、今日のコードは遅くなりません)。
たとえば、Java コンパイラは、オートボクシング用のコードを生成するときにこの API を使用します。