Double.valueof javadoc では値をキャッシュすると書かれていますが、実際はキャッシュしていません。質問する

Double.valueof javadoc では値をキャッシュすると書かれていますが、実際はキャッシュしていません。質問する

OpenJDK では、メソッドの場合:

public static Double valueOf(double d)

javadoc には次のように書かれています:

指定された double 値を表す Double インスタンスを返します。新しい Double インスタンスが必要ない場合は、このメソッドをコンストラクター Double(double) よりも優先して使用する必要があります。このメソッドは、頻繁に要求される値をキャッシュすることで、大幅に優れたスペースと時間のパフォーマンスを実現する可能性が高いためです。

実際のコードは次のとおりです。

public static Double valueOf(double d) {
    return new Double(d);
}

キャッシュは嘘です! ここで何が起こっているのですか?

ベストアンサー1

メソッドは、、、その他多くの型に存在しIntegerLongドキュメントBigDecimalは常に同じです。定義されていない状況では、メソッドできる同じ結果を返します。

私の知る限り、キャッシュは整数型に対してのみ実装されており、-128 から 127 (最も一般的な値) の間の値に対してキャッシュされたインスタンスを返します。 の場合BigDecimal、キャッシュは現在 0 から 10 までの値に対して機能します。

Javaの後のバージョンかもしれないこの動作を他の値/より多くの型に拡張します。したがって、このコードを今日使用するのは賢明です。明日はコードが速くなる可能性があるからです (そして、今日のコードは遅くなりません)。

たとえば、Java コンパイラは、オートボクシング用のコードを生成するときにこの API を使用します。

おすすめ記事