teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2018/09/27 07:02

投稿

退会済みユーザー
answer CHANGED
@@ -38,4 +38,22 @@
38
38
 
39
39
  > 「参照型だから変わると思いきや変更なし」なのは何故かということですか?
40
40
 
41
- の答えにはなると思うのですがいかがでしょうか?
41
+ の答えにはなると思うのですがいかがでしょうか?
42
+
43
+ **【追記】**
44
+
45
+ ついでに string 型の不変性の話を書いておきます。下のコードを見てください。
46
+
47
+
48
+ ```
49
+ string s1 = "hoge1";
50
+ string t1 = s1;
51
+ s1 += "0";
52
+ Console.WriteLine(t1); // 結果は "hoge1"
53
+ ```
54
+
55
+ string は参照型なので、上記の ```s1 += "0";``` で、変数 s1 が指すオブジェクトを "hoge1" ⇒ "hoge10" を変更する、即ちオブジェクトのアドレスは変わらないと思うかも知れませんね。
56
+
57
+ でも、不変性があるのでオブジェクトは変更できません。どうしているかと言うと、"hoge10" というオブジェクトを新たに作って(当然 "hoge1" とはアドレスが違う)それへの参照を s1 に代入します。
58
+
59
+ 一方、t1 は "hoge1" を指したままのので ```Console.WriteLine(t1);``` の結果は "hoge1" になります。