回答編集履歴

1

追記

2019/11/20 03:44

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -67,3 +67,59 @@
67
67
 
68
68
 
69
69
  インスタンスと変数の区別は付いているでしょうか?
70
+
71
+
72
+
73
+ コメントを受けて
74
+
75
+ ---
76
+
77
+ > なぜStringをコピーした場合とJava2をコピーした場合とで挙動が変わってくるのでしょうか?
78
+
79
+
80
+
81
+ 参照先のフィールドを置き換えるか、参照先自体を置き換えるかの違いです。
82
+
83
+ ```Java
84
+
85
+ class Data {
86
+
87
+ int num;
88
+
89
+ Data(int n) { num = n; }
90
+
91
+ }
92
+
93
+
94
+
95
+ public class Main {
96
+
97
+ public static void main(String[] args) {
98
+
99
+ Data[] arr1 = {new Data(0), new Data(1)};
100
+
101
+ Data[] arr2 = new Data[2];
102
+
103
+
104
+
105
+ System.arraycopy(arr1, 0, arr2, 0, arr1.length);
106
+
107
+ arr2[0].num = 42;
108
+
109
+ arr2[1] = new Data(100);
110
+
111
+ }
112
+
113
+ }
114
+
115
+ ```
116
+
117
+
118
+
119
+ **実行終了時の状態**
120
+
121
+ ![実行終了時の状態](4248eb1021518b4602682193f9a930ba.png)
122
+
123
+
124
+
125
+ [Visualize Python, Java, JavaScript, C, C++, Ruby code execution](http://www.pythontutor.com/visualize.html#code=class%20Data%20%7B%0A%20%20%20%20int%20num%3B%0A%20%20%20%20Data%28int%20n%29%20%7B%20num%20%3D%20n%3B%20%7D%0A%7D%0A%0Apublic%20class%20Main%20%7B%0A%20%20%20%20public%20static%20void%20main%28String%5B%5D%20args%29%20%7B%0A%20%20%20%20%20%20%20%20Data%5B%5D%20arr1%20%3D%20%7Bnew%20Data%280%29,%20new%20Data%281%29%7D%3B%0A%20%20%20%20%20%20%20%20Data%5B%5D%20arr2%20%3D%20new%20Data%5B2%5D%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20System.arraycopy%28arr1,%200,%20arr2,%200,%20arr1.length%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20arr2%5B0%5D.num%20%3D%2042%3B%0A%20%20%20%20%20%20%20%20arr2%5B1%5D%20%3D%20new%20Data%28100%29%3B%0A%20%20%20%20%7D%0A%7D&cumulative=false&curInstr=18&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=java&rawInputLstJSON=%5B%5D&textReferences=false)