【Java】String型の参照の不思議

String型の参照の仕方について、Udacityの講義で気づいて不思議に思ったのでメモ。
例えば下のコードの場合、b = "DEF"のあと、aも"DEF"になりそうな感じがするけど"ABC"のまま。cとdみたいにnewを使ったときも同様。値渡しみたいな感じがするけど、あくまでStringは他のオブジェクトと同様に参照渡しらしい。

public class StringTest {
	public static void main(String[] args) {
		String a = "ABC";
		String b = a;
		b = "DEF";
		System.out.println("a = " + a + " b = " + b);
		
		String c = new String();
		c = "ABC";
		String d = c;
		d = "DEF";
		
		System.out.println("c = " + c + " d = " + d);
	}
}

出力結果:

a = ABC b = DEF
c = ABC d = DEF

b = "DEF"の時点で新しくオブジェクトが作られてるのかな?よく解らないけど、今のところはこういう挙動をするということだけ覚えておこう。

関連リンク:
参照渡し - Java - 教えて!goo

追記 (2013/6/13):
あとから考えてみたら、やっぱりb = "DEF"で"DEF"というオブジェクトが作られてるだけであって、なんら不思議はないことに気づいた。なんで不思議だと思っちゃったんだろう…。