同値性と同一性という言葉は、
Javaの勉強をしていると出てきます。
そこで、googleで「Java 同値性 同一性」
と検索してみたりするのですが、
どのサイトも同じです。
「== は同値性、equalsは同一性」や、
「equalsをオーバーライドして使う」
などの説明が出てきます。
私も最初はそういうサイトを読んで、
○○の場合は同値性、
○○の場合は同一性。
そんな理解の仕方をしていました。
しかし、最近になって『ちょっと違うな』と感じています。
○○の場合は○○というのは、本質的な理解からはずれています。
肝心なことは、
『比較』の意味が、オペランドによって変わる。
ということです。
(オペランドというのは、あなたが比較しようとしているものです。)
オペランドの型によって比較の意味が変わります。
1.オペランドの型がプリミティブ型なら、比較の意味は同値性。
2.オペランドの型が参照型なら、比較の意味は同一性。
になります。