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"というオブジェクトが作られてるだけであって、なんら不思議はないことに気づいた。なんで不思議だと思っちゃったんだろう…。