初心者向けのJava講座です。一緒にJavaを勉強しませんか?
はじめてのJava入門初心者向けのJava講座 |
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は別々のオブジェクトを参照していることになります。