Stringクラス2

前のところでStringクラスについていろいろ見てきました。
オブジェクトの生成方法には2種類あることを説明しました。

それは

String str = "Hello!Java";
String str = new String("Hello!Java");

でした。

しかし、この2つの方法には違いがあります。

次の例を見てください。

String str1 = "Hello!Java";
String str2 = "Hello!Java";
String str3 = new String("Hello!Java");

ここの3つのstr1,str2,str3には以下のような関係があります。

つまり、str1とstr2は同じオブジェクトを参照しています。
equals()メソッドのところでも説明したと思いますが、Stringクラスの場合は
同じ文字列が同一であればJavaVMが「同一オブジェクトと判断しているからです
このように文字列リテラルによるオブジェクトの参照は、その文字列が同一である
場合は先に生成されたStringオブジェクトへの参照が渡されます。

それに比べてstr3のほうはたとえ同一文字列であっても新規にStringオブジェクトが 生成されます。

つまり、newキーワードを使うと新しいオブジェクトが生成されると考えられます。

その違いを次のサンプルプログラムを確認します。

サンプルプログラム(Sample73.java)

class Sample73{
    public static void main(String args[]){
  String str1 = "Hello!Java";
  String str2 = "Hello!Java";
  String str3 = new String("Hello!Java");

   //同じ文字列かを判定しています。
  System.out.println("str1.equals(str2) = " + str1.equals(str2));
  System.out.println("str1.equals(str3) = " + str1.equals(str3));

   //同じオブジェクトかを判定しています。
  System.out.println("str1 == str2 = " + (str1 == str2));
  System.out.println("str1 == str3 = " + (str1 == str3));

    }

}

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

コンパイル・実行します


何回も説明しましたが、Stringクラスにおいてequals()メソッドの使用はあくまでも文字列の判定に使います。
Stringクラスにおいて参照オブジェクトの比較には==演算子を使用します。
したがって、str1 == str3 だけがfalseが返されています。
このことより、str1 と str3は別々のオブジェクトを参照していることになります。

ページのトップへ戻る