回答編集履歴
1
追記
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)
|