回答編集履歴
1
追記
answer
CHANGED
@@ -32,4 +32,32 @@
|
|
32
32
|
}
|
33
33
|
```
|
34
34
|
|
35
|
-
インスタンスと変数の区別は付いているでしょうか?
|
35
|
+
インスタンスと変数の区別は付いているでしょうか?
|
36
|
+
|
37
|
+
コメントを受けて
|
38
|
+
---
|
39
|
+
> なぜStringをコピーした場合とJava2をコピーした場合とで挙動が変わってくるのでしょうか?
|
40
|
+
|
41
|
+
参照先のフィールドを置き換えるか、参照先自体を置き換えるかの違いです。
|
42
|
+
```Java
|
43
|
+
class Data {
|
44
|
+
int num;
|
45
|
+
Data(int n) { num = n; }
|
46
|
+
}
|
47
|
+
|
48
|
+
public class Main {
|
49
|
+
public static void main(String[] args) {
|
50
|
+
Data[] arr1 = {new Data(0), new Data(1)};
|
51
|
+
Data[] arr2 = new Data[2];
|
52
|
+
|
53
|
+
System.arraycopy(arr1, 0, arr2, 0, arr1.length);
|
54
|
+
arr2[0].num = 42;
|
55
|
+
arr2[1] = new Data(100);
|
56
|
+
}
|
57
|
+
}
|
58
|
+
```
|
59
|
+
|
60
|
+
**実行終了時の状態**
|
61
|
+

|
62
|
+
|
63
|
+
[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)
|