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

回答編集履歴

1

追記

2019/11/20 03:44

投稿

LouiS0616
LouiS0616

スコア35678

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
+ ![実行終了時の状態](4248eb1021518b4602682193f9a930ba.png)
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)