Javaプログラミングのキモは、オブジェクトという概念。今回は、文字列の比較でその違いをみてみよう。

問題 - 文字列の比較「難易度: 中」

同じ文字列"abc"をセットしたString型の変数が4つあります。

str1、str2は文字列を代入したものです。str3、str4はString型のオブジェクトとして生成したものです。

String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
String str4 = new String("abc");

さて、次の2つのif文の結果はどうなるでしょうか?

【1】str1とstr2を「==」で比較

if (str1 == str2) {
    System.out.println("等しい");
} else {
    System.out.println("等しくない");
}

【2】str3とstr4を「==」で比較

if (str3 == str4) {
    System.out.println("等しい");
} else {
    System.out.println("等しくない");
}

Javaプログラミングのキモは、オブジェクトという概念。今回は、文字列の比較でその違いをみてみよう。

問題 - 文字列の比較「難易度: 中」

同じ文字列"abc"をセットしたString型の変数が4つあります。

str1、str2は文字列を代入したものです。str3、str4はString型のオブジェクトとして生成したものです。

String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
String str4 = new String("abc");

さて、次の2つのif文の結果はどうなるでしょうか?

【1】str1とstr2を「==」で比較

if (str1 == str2) {
    System.out.println("等しい");
} else {
    System.out.println("等しくない");
}

【2】str3とstr4を「==」で比較

if (str3 == str4) {
    System.out.println("等しい");
} else {
    System.out.println("等しくない");
}

解答

【1】str1 == str2の比較は"等しい"

【2】str3 == str4の比較は"等しくない"。

解説

「==」はオブジェクトが同一のものであるかどうかを調べる比較演算子です。文字列の値(内容)を比較する演算子ではありません。文字列の値を比較するときにはequalsメソッドを使用します。

str3とstr4はnew String("abc")で、それぞれ異なるオブジェクトとして生成したため、「==」の比較の結果は"等しくない"となります。

str1とstr2の比較の結果も同様に"等しくない"となりそうですが、同じ値の文字列"abc"を代入することは、内部的には同じオブジェクトを再利用するという処理になるので、「==」の比較の結果は"等しい"となります。

ちょっと難しかったかな? ではまた明日!