Stringはnewしない

""(ダブルクォート)による初期化とnew String("")による初期化の違い

""(ダブルクォート)によって文字列を初期化すると、同一の文字列オブジェクトを仮想マシン内(アプリケーション内)のメモリで使いまわすことが出来ます。

new String()(コンストラクタ)によって文字列を初期化すると、都度同じ値の文字列型オブジェクトを生成します。


	String value1 = "maekawa";
	String value2 = "maekawa";
	String value3 = new String("maekawa");

	System.out.println(value1 == value2); // ← 同じインスタンスを指すため"true"
	System.out.println(value2 == value3); // ← 異なるインスタンスを指すため"false"
	System.out.println(value1 == value3); // ← 異なるインスタンスを指すため"false"
						

上記例では、一旦ダブルクォートで"maekawa"という文字列が生成されると、アプリケーション内のメモリ上で"maekawa"が保持されます。

文字列型の変数を、再度同じ値の文字列("maekawa")で初期化する際に、値をダブルクォートで囲んで初期化する場合、新しいオブジェクトを生成せず、すでにメモリ上で保持されている"maekawa"の値を使いまわします。

文字列を初期化するのに、Stringをnewしてもダブルクォートで囲んでもたいした違いはないのですが、メモリを若干節約できるのと、ソースを書く手間が省けるので、まあ、無駄な書き方をするな、ということです。