アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは、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がオブジェクトなので)
こういう使い方は見たことないのですが、これは有効なのでしょうか?

A 回答 (4件)

enumを使ってるので、ちょっとややこしくなってますね。



そもそも、オブジェクト型の変数に対して==を使うかどうかですが、
これは文法上問題ないですし、使ってはいけないものでもありません。

例えば、2つのオブジェクト変数があって、「片方だけ」を更新したいとします。
このとき、2つのオブジェクトが「実は同じ参照を持っている」場合、
片方を修正したつもりが、誤って他方の値まで更新されてしまいます。
これを防ぐため、==を使って2つのオブジェクトが同じ(ものを参照している)なら
エラーを出して更新するのを防ぐ、という使い方をすることは十分考えられます。

※どこを参照しているかは関係なく、そのオブジェクトの値が同じかどうかを比較したい、
という場合は、equals()メソッドを使います。

なので、オブジェクトに対して、==を「使ってはいけない」ということはありません。
どう比較したいかによって使い分ける必要がある、ということです。

話が逸れました。
Season.SPRING == Season.SPRINGの件ですが、上で説明した内容とはちょっと違いますね。
値が同じかどうかを比較しているようなコードですから。
通常のオブジェクト型なら、ちょっとまずいでしょうが、
おそらくこれは、enum型の値なので単純に==で比較しても問題ない、ということなのでしょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/03 00:07

Javaでは、値は基本的に基本型(プリミティブタイプ)とオブジェクトに分かれます。

==は、すべての値について使うことができます。もちろん、オブジェクトどうしの比較にもよく使われますよ。

ただし、オブジェクトどうしの比較には「2つのオブジェクトが同等のものと判断できるか」と「2つの変数が同一のインスタンスを参照しているか」があるので注意が必要です。2つの異なるオブジェクトが同等のものかどうかを調べるにはequalsメソッドを使います。オブジェクトの比較で==を使うのは、2つのオブジェクトが設定されている変数の参照するものが同等である(つまり同じものを参照している)かどうかを調べるのに用いられます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/03 00:06

こんにちは



javaはやっていないのですが他のものでも同じですので有効だと思います

『==』などの場合は比較演算子といいます
http://www.hellohiro.com/basic/hikaku.htm

『=』でやった場合には代入演算子といいます
http://www.hellohiro.com/basic/dainyuu.htm
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/03 00:05

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/03 00:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!