java.util.Optional
やjava.time.LocalDateTime
などの一部のクラスは値ベースです。値ベース・クラスのインスタンスは:
equals
、hashCode
、およびtoString
の実装を持つ(インスタンスの状態からのみ計算される、識別情報あるいは他のオブジェクトまたは変数の状態からは計算されない)==
)、インスタンスのIDハッシュ・コード、またはインスタンスの固有ロックでの同期など、ID依存操作を使用しない。==
)ではなくequals()
のみに基づいて同等と見なされる。equals()
に基づいて等しい任意の2つのインスタンスx
とy
を交換しても、動作の表面上の変化は起きない。
プログラムは、値ベース・クラスの同等の値に対する2つの参照を区別しようとした場合、参照等価性に基づいて直接的に、あるいは同期、IDハッシュ、直列化、または他のID依存メカニズムに基づいて間接的に、のどちらの場合でも、予期できない結果を生成する可能性があります。こうしたID依存操作を値ベース・クラスのインスタンスで使用すると、予測できない影響が生じることがあるため、回避するようにしてください。