ひよっこPGのブログ

主に、技術メモや英語たまにギター関連のことも書いているブログです。

Javaで Stringの文字列結合について

Stringの文字列結合について、知らなかったことがあるので自分なりに説明してみます。

まず下記のプログラムの実行結果は何になるでしょう?

public static void main(String[] args) {
	
	String a1 = "aaa";
	String a2 = "aaa";
	// a1 == a2 は true
	// 同じ固定文字列なら新たにStringインスタンスを生成するのではなく
	// 同じインスタンスを返すようになり、参照は同一なので。
	
	String str1 = "Hello" + "world";
	
	String hello = "Hello";
	String world = "world";
	String helloWorld = hello + world;
	
	if(str1 == helloWorld) {
		System.out.println("str1 == helloWorldは trueです。");
	}else {
		System.out.println("str1 == helloWorldは falseです。");
	}
}

str1 == helloWorldは true or false。 どちらになるでしょうか?











正解は、 str1 == helloWorldは falseになります。
プログラム中の一定の箇所は、コンパイル下記のように置き換わる。

String str1 = "Hello" + "world";
// ↓
String str1 = "Helloworld";

String hello = "Hello";
String world = "world";
String helloWorld = hello + world;
// ↓
String hello = "Hello";
String world = "world";
String helloWorld = (new StringBuilder(hello)).append(world).toString();

str1 == helloWorld がfalseということは、 str1とhelloWorldの参照先が違いますよ ってことです。
参照先が異なる理由は、StringBuilder#append().toString()の内部で「new String()」が使われているためです。
新たにインスタンスを生成されて、参照先が変わったってことですね。