同値性と同一性 を区別するコツ | Javaプログラマー資格試験(OCJ-P) WEB講座

Javaプログラマー資格試験(OCJ-P) WEB講座

Javaプログラマー資格(OCJ-P)を学習するブログです。

OCJ-P・Javaプログラマー資格をとりたい。
Javaプログラミングの入門者・初心者。

そんなあなたに、Javaプログラマー資格の取得に役立つ本質的な知識を、
分かりやすく解説していきます。

 同値性と同一性という言葉は、
Javaの勉強をしていると出てきます。

そこで、googleで「Java 同値性 同一性」
と検索してみたりするのですが、
どのサイトも同じです。

「== は同値性、equalsは同一性」や、
「equalsをオーバーライドして使う」
などの説明が出てきます。

私も最初はそういうサイトを読んで、
○○の場合は同値性、
○○の場合は同一性。
そんな理解の仕方をしていました。

しかし、最近になって『ちょっと違うな』と感じています。
○○の場合は○○というのは、本質的な理解からはずれています。

 肝心なことは、
『比較』の意味が、オペランドによって変わる。
ということです。
(オペランドというのは、あなたが比較しようとしているものです。)

オペランドの型によって比較の意味が変わります。
1.オペランドの型がプリミティブ型なら、比較の意味は同値性。
2.オペランドの型が参照型なら、比較の意味は同一性。
になります。