私のメモで次のことを見つけましたが、私はそれを理解することができません:
プリミティブ型ラッパークラスは、限られた数の値のキャッシュを実装します。
これにより、限られた数の深く等しいラッパーオブジェクトも浅く等しくなることが保証されo1.equals( o2 )
ますo1 == o2
。
たとえば、new Integer( 0 ) == new Integer( 0 )
。
一般に、これは常に機能するとは限りません。
たとえば、new Integer(666)== new Integer(666)
は成り立たない場合があります。
キャッシュの理由は、メモリを節約するためです。
一般に、キャッシュは「小さな」プリミティブ値に対して機能します。
これが何を意味するのか、または深い(.equals())と浅い(==)が等しいの違いが何であるかがわかりません。私は実際には、.equalsをオブジェクトに使用し、==を積分値に使用する必要があることを知っていますが、これの実際の理由は私をほのめかします。
浅い名前では、両方の値が同じタイプと名前であることを確認するだけで、両方の変数が同じオブジェクトを指していることを詳細に確認していると思いますか?ただし、ここでキャッシングがどのように機能するのか、なぜそれが役立つのかはわかりません。