• ベストアンサー

Java: ==の扱い

こんにちは、Javaを勉強しているのですが、質問があります。 まず、以下のコードを見てください。 enum Season{ SPRING, SUMMER, FALL, WINTER } class Sample { public static void main(String args[]){ System.out.println(Season.SPRING == Season.SPRING) } } このコードでは、trueが出力されるのですが ==は、オブジェクトに対して使用しています。(Season.SPRINGやSeason.SPRINGがオブジェクトなので) こういう使い方は見たことないのですが、これは有効なのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • neko_noko
  • ベストアンサー率45% (146/319)
回答No.4

enumを使ってるので、ちょっとややこしくなってますね。 そもそも、オブジェクト型の変数に対して==を使うかどうかですが、 これは文法上問題ないですし、使ってはいけないものでもありません。 例えば、2つのオブジェクト変数があって、「片方だけ」を更新したいとします。 このとき、2つのオブジェクトが「実は同じ参照を持っている」場合、 片方を修正したつもりが、誤って他方の値まで更新されてしまいます。 これを防ぐため、==を使って2つのオブジェクトが同じ(ものを参照している)なら エラーを出して更新するのを防ぐ、という使い方をすることは十分考えられます。 ※どこを参照しているかは関係なく、そのオブジェクトの値が同じかどうかを比較したい、 という場合は、equals()メソッドを使います。 なので、オブジェクトに対して、==を「使ってはいけない」ということはありません。 どう比較したいかによって使い分ける必要がある、ということです。 話が逸れました。 Season.SPRING == Season.SPRINGの件ですが、上で説明した内容とはちょっと違いますね。 値が同じかどうかを比較しているようなコードですから。 通常のオブジェクト型なら、ちょっとまずいでしょうが、 おそらくこれは、enum型の値なので単純に==で比較しても問題ない、ということなのでしょう。

geocrew1
質問者

お礼

お返事ありがとうございます。 SJC-P試験にも、両者の違いはよく問われるそうです。 勉強になりました。

その他の回答 (3)

noname#49664
noname#49664
回答No.3

Javaでは、値は基本的に基本型(プリミティブタイプ)とオブジェクトに分かれます。==は、すべての値について使うことができます。もちろん、オブジェクトどうしの比較にもよく使われますよ。 ただし、オブジェクトどうしの比較には「2つのオブジェクトが同等のものと判断できるか」と「2つの変数が同一のインスタンスを参照しているか」があるので注意が必要です。2つの異なるオブジェクトが同等のものかどうかを調べるにはequalsメソッドを使います。オブジェクトの比較で==を使うのは、2つのオブジェクトが設定されている変数の参照するものが同等である(つまり同じものを参照している)かどうかを調べるのに用いられます。

geocrew1
質問者

お礼

お返事ありがとうございます。 2つの違いについて、よく理解できました。

  • leap_day
  • ベストアンサー率60% (338/561)
回答No.2

こんにちは javaはやっていないのですが他のものでも同じですので有効だと思います 『==』などの場合は比較演算子といいます http://www.hellohiro.com/basic/hikaku.htm 『=』でやった場合には代入演算子といいます http://www.hellohiro.com/basic/dainyuu.htm

geocrew1
質問者

お礼

お返事ありがとうございます。 リンク助かりました。

  • MASA_H
  • ベストアンサー率42% (64/151)
回答No.1

==はif等で使われるとおり右辺と左辺を比較して等しければ"true"を等しくなければ"false"を返すので、この使い方も有効です。

geocrew1
質問者

お礼

お返事ありがとうございます。 なるほど、よく解りました。

関連するQ&A