クラス型変数の比較 - 萌えJava超入門
第十一章
メモリで見る基本型とクラス型の違い

クラス型変数の比較

クラス型変数を比較するとどうなるでしょう?


クラス型変数の比較

配列を例にして、クラス型変数の比較をしてみよう。
クラス型変数を関係演算子で比較するとどうなるのでしょうか。
試してみましょう。

//Sample06_06.java
class Sample06_06 {
  public static void main(String[] args){

    int[] array_1 = new int[4];
    int[] array_2 = new int[4];
    /*要素に値を代入*/
    if(array_1 == array_2){
        System.out.println("array_1 と array_2 は同じ");
    }else{
        System.out.println("array_1 と array_2 は異なる");
    }
  }
}

コマンドライン
>javac Sample06_06.java
>java Sample06_06
array_1 と array_2 は異なる

array_1 も array_2 も要素数は4で、すべての値が0です。
でも結果は「異なる」でした。

実は参照先のメモリアドレスの値を
比較しているんだ。
下のモデルでは
0x0050 と 0x00C0 を比較した状態だ。
これかぁ!
クラス型変数の比較(異なる)



とゆうわけで、
これなら同じになる。
//Sample06_07.java
class Sample06_07 {
  public static void main(String[] args){

    int[] array_1 = new int[4];
    int[] array_2 = array_1;/*インスタンスを共有*/

    /*要素に値を代入*/
    if(array_1 == array_2){
        System.out.println("array_1 と array_2 は同じ");
    }else{
        System.out.println("array_1 と array_2 は異なる");
    }
  }
}

コマンドライン
>javac Sample06_07.java
>java Sample06_07
array_1 と array_2 は同じ

クラス型変数の比較(同じ)

クラス型変数を関係演算子で比較すると、参照先のメモリアドレスを比較します。
以前「String型は関係演算子では比較できません」と説明したのはこの為です。

Stringもクラス型変数ですから、同様の構造をしているのです。



お疲れ様でした。




© 2019 awasekagami