同値性と同一性という言葉は、
Javaの勉強をしていると出てきます。
そこで、googleで「Java 同値性 同一性」
と検索してみたりするのですが、
どのサイトも同じです。
「== は同値性、equalsは同一性」や、
「equalsをオーバーライドして使う」
などの説明が出てきます。
私も最初はそういうサイトを読んで、
○○の場合は同値性、
○○の場合は同一性。
そんな理解の仕方をしていました。
しかし、最近になって『ちょっと違うな』と感じています。
○○の場合は○○というのは、本質的な理解からはずれています。
肝心なことは、
『比較』の意味が、オペランドによって変わる。
ということです。
(オペランドというのは、あなたが比較しようとしているものです。)
オペランドの型によって比較の意味が変わります。
1.オペランドの型がプリミティブ型なら、比較の意味は同値性。
2.オペランドの型が参照型なら、比較の意味は同一性。
になります。
Javaの学習がすすまない大きな理由として、
「イマイチぴんとこない」というのがあります。
ちゃんと教科書を読んでコツコツ進めていても、
「何回繰り返しても身につかない」
「どうしても覚えることができない」
そんな風に私は何回も感じたことがあります。
そして、その理由は、
『なぜ必要なのか分かっていない』
ことです。
言い換えると、
『この機能が何に役に立つのか』
が分かっていないのです。
そういう人は頭では「ふむふむなるほど」と思っていても、
心の底では、「これ、何に使うんやろ?」と感じています。
人はなかなか必要性に迫られないと本気になりません。
必要性を感じないと、頭のスイッチが入らないようにできてるんです。
ですから、特に必要性を感じないものを勉強しても、
脳のもっている記憶力の10%しか使ってないようなもの。
それでは能率的な勉強はできませんし、
楽しい楽しいJavaの勉強も、退屈で色褪せたものに感じてしまいます。
損です!
Javaは現在のIT業界で、最も選ばれているプログラミング言語です。
ですので、なぜJavaが選ばれるのか?Javaの何がいいのか?
それをあたなが勉強中のJavaの機能や言語と紐つけて勉強しましょう。
必要性・何に役に立つのか?
がしっかり理解できたら、あなたの頭は勝手に動き出します。
全く苦労せずに、猛烈な努力せずにOCJ-Pを取得することができます。
ぜひ、Javaの勉強を進める際は、
これから勉強することが、何の役に立つのか?
理解してから、新しいことを勉強してみてください!
Javaがもっと楽しくなりますよ^^
「イマイチぴんとこない」というのがあります。
ちゃんと教科書を読んでコツコツ進めていても、
「何回繰り返しても身につかない」
「どうしても覚えることができない」
そんな風に私は何回も感じたことがあります。
そして、その理由は、
『なぜ必要なのか分かっていない』
ことです。
言い換えると、
『この機能が何に役に立つのか』
が分かっていないのです。
そういう人は頭では「ふむふむなるほど」と思っていても、
心の底では、「これ、何に使うんやろ?」と感じています。
人はなかなか必要性に迫られないと本気になりません。
必要性を感じないと、頭のスイッチが入らないようにできてるんです。
ですから、特に必要性を感じないものを勉強しても、
脳のもっている記憶力の10%しか使ってないようなもの。
それでは能率的な勉強はできませんし、
楽しい楽しいJavaの勉強も、退屈で色褪せたものに感じてしまいます。
損です!
Javaは現在のIT業界で、最も選ばれているプログラミング言語です。
ですので、なぜJavaが選ばれるのか?Javaの何がいいのか?
それをあたなが勉強中のJavaの機能や言語と紐つけて勉強しましょう。
必要性・何に役に立つのか?
がしっかり理解できたら、あなたの頭は勝手に動き出します。
全く苦労せずに、猛烈な努力せずにOCJ-Pを取得することができます。
ぜひ、Javaの勉強を進める際は、
これから勉強することが、何の役に立つのか?
理解してから、新しいことを勉強してみてください!
Javaがもっと楽しくなりますよ^^
Javaはプリミティブ型と参照型という、
2つの大きな型に分けられます。
それゆえに、同値性と同一性という、
紛らわしい概念が出てきます。
いろいろクラスを作って、
==やequalsを実験してみたけど、
falseばっかり返って来て、たまにtrueが返ってくる。
いまいち法則性が分からない。
あなたもそう思っていませんか?
この界隈はOCJ-Pで非常に狙われやすいですし、
オブジェクト指向の型というシステム上、
とても重要なところなので、しっかりと整理しておきましょう。
肝心なことはたった1つです!!!
オペランド(比較する対象)が、
プリミティブ型か参照型かを確認する。
ということ。
下の図にまとめました。
同値性という言葉は、プリミティブ型の比較のとき。
同一性という言場は、参照型を比較するときに使います。
プリミティブ型を比較するときは、==しか使えません。
同一性を比較するときは、==もequalsも使えますが、
ともに同一性の比較になります。
オペランドの型に着目しましょう。
OCJ-Pでは、それで解決できます^^
2つの大きな型に分けられます。
それゆえに、同値性と同一性という、
紛らわしい概念が出てきます。
いろいろクラスを作って、
==やequalsを実験してみたけど、
falseばっかり返って来て、たまにtrueが返ってくる。
いまいち法則性が分からない。
あなたもそう思っていませんか?
この界隈はOCJ-Pで非常に狙われやすいですし、
オブジェクト指向の型というシステム上、
とても重要なところなので、しっかりと整理しておきましょう。
肝心なことはたった1つです!!!
オペランド(比較する対象)が、
プリミティブ型か参照型かを確認する。
ということ。
下の図にまとめました。

同値性という言葉は、プリミティブ型の比較のとき。
同一性という言場は、参照型を比較するときに使います。
プリミティブ型を比較するときは、==しか使えません。
同一性を比較するときは、==もequalsも使えますが、
ともに同一性の比較になります。
オペランドの型に着目しましょう。
OCJ-Pでは、それで解決できます^^