if (num == 0) { } // 変数宣言は省略みたいなのです。
numと0が等しいかどうかを比較しています。
それでは文字列を扱うString型の比較はどうでしょうか?
String zero = "0"; if (zero == 0) { } // TRUEを返すこれはTRUEとなります。
では次のはどうでしょう?
String zero = "0"; String zeroNew = new String("0"); if (zero == zeroNew) { } // FALSEを返すこれはFALSEとなります。
参照型の場合はプリミティブ型の場合と異なり、
値そのものでなくオブジェクトの比較が行われます。
この場合、newされたzeroNewが指す"0"を格納したアドレスは
zeroのものとは違うアドレス(それこそ新しいアドレス)のため、FALSEとなります。
以前説明に使用したジョブクラスを使用して説明してみます。
シーフ siroco = new シーフ(); // シーフクラスのsirocoインスタンスを生成 シーフ kururu = new シーフ(); // シーフクラスのkururuインスタンスを生成 if (siroco == kururu ) { } // FALSEを返すこの方がわかりやすいんじゃないでしょうか?
同じシーフクラスのインスタンスでも、sirocoとkururuは別人ですもんね。
それではオブジェクトが指している"値"を比較するにはどうしたらいいでしょうか?
それはObjectクラスのメソッド、equalsを使用します。
String zero = "0"; String zeroNew = new String("0"); if (zero.equals(zeroNew)) { } // TRUEを返すこの例ではString型のzeroインスタンスのequalsメソッドを使用して、
同じくString型のzeroNewインスタンスとの比較を行っています。
(参照型のクラスはすべてObjectクラスを継承しているため、equalsを使う事が出来る)
equalsなら別インスタンスでも値の比較ができ、求めている結果が得られます。
文字列の比較は結構やると思いますので、
くれぐれも"=="で比較しないように~
今回は以上です。
次回は繰り返し処理について書いていきます。
0 件のコメント:
コメントを投稿