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 件のコメント:
コメントを投稿