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

回答編集履歴

6

解決策の追加

2018/08/16 08:58

投稿

opyon
opyon

スコア1009

answer CHANGED
@@ -1,3 +1,10 @@
1
+ まとめ
2
+ ・`new`で格納場所を確保する
3
+ ・参照型の場合は`new =`で代入しても参照アドレスがコピーされるだけ
4
+ ・参照型の場合はfor文などを使ってコピー
5
+
6
+ ---
7
+
1
8
  解決になるか分かりませんが自分なりにコピーするならこれが今のところ最適かなと思います。
2
9
 
3
10
  ```java

5

参考URLの追加

2018/08/16 08:58

投稿

opyon
opyon

スコア1009

answer CHANGED
@@ -53,6 +53,8 @@
53
53
 
54
54
  [【初心者が注意したい】Java配列コピーの方法まとめ](https://eng-entrance.com/java-array-copy)
55
55
 
56
+ [ 参照型配列のコピー](https://www.milk-island.net/document/java/kihon/j4/)
57
+
56
58
  使ったことのない気になった内容でしたので検索してみました。
57
59
 
58
60
  分かりやすい記事があったのでリンク貼っておきますね。

4

解決策の追加

2018/08/16 08:44

投稿

opyon
opyon

スコア1009

answer CHANGED
@@ -1,3 +1,56 @@
1
+ 解決になるか分かりませんが自分なりにコピーするならこれが今のところ最適かなと思います。
2
+
3
+ ```java
4
+ public static void main(String[] args) {
5
+ Sample[] array1 = {
6
+ new Sample(10),
7
+ new Sample(20),
8
+ new Sample(30)
9
+ };
10
+
11
+ Sample[] array2 = new Sample[array1.length];
12
+
13
+ for(int i = 0; i < array1.length; i ++) {
14
+ array2[i] = new Sample(array1[i].num);
15
+ }
16
+
17
+ array2[1].num = 99;
18
+
19
+ System.out.println("array1[0] "+ array1[0].num); // 10
20
+ System.out.println("array1[1] "+ array1[1].num); // 20 元のまま
21
+ System.out.println("array1[2] "+ array1[2].num); // 30
22
+
23
+ System.out.println();
24
+
25
+ System.out.println("array2[0] "+ array2[0].num); // 10
26
+ System.out.println("array2[1] "+ array2[1].num); // 99 ここだけ変更
27
+ System.out.println("array2[2] "+ array2[2].num); // 30
28
+
29
+ }
30
+ ```
31
+ ```java
32
+ public class Sample {
33
+
34
+ public int num;
35
+
36
+ Sample(int num) {
37
+ this.num = num;
38
+ }
39
+
40
+ }
41
+ ```
42
+ 出力結果
43
+ ---
44
+ array1[0] 10
45
+ array1[1] 20
46
+ array1[2] 30
47
+
48
+ array2[0] 10
49
+ array2[1] 99
50
+ array2[2] 30
51
+
52
+ ---
53
+
1
54
  [【初心者が注意したい】Java配列コピーの方法まとめ](https://eng-entrance.com/java-array-copy)
2
55
 
3
56
  使ったことのない気になった内容でしたので検索してみました。

3

画像位置の移動

2018/08/16 08:38

投稿

opyon
opyon

スコア1009

answer CHANGED
@@ -1,7 +1,5 @@
1
1
  [【初心者が注意したい】Java配列コピーの方法まとめ](https://eng-entrance.com/java-array-copy)
2
2
 
3
- ![イメージ説明](220658cb8cd7b1ec448b15bd499ae630.png)
4
-
5
3
  使ったことのない気になった内容でしたので検索してみました。
6
4
 
7
5
  分かりやすい記事があったのでリンク貼っておきますね。
@@ -19,6 +17,7 @@
19
17
  逆説的に実体がコピーされていないということはオブジェクト参照されている。
20
18
  オブジェクト参照されているのでこの方法のままではコピー出来そうに無い。
21
19
  別途イテレーションなどを使ってコピーし直す必要がありそうです。
20
+ ![イメージ説明](220658cb8cd7b1ec448b15bd499ae630.png)
22
21
  [ シャローコピーとディープコピー](http://d.hatena.ne.jp/ariteku/20110602/1307031712)
23
22
 
24
23
  ---

2

追記

2018/08/16 07:17

投稿

opyon
opyon

スコア1009

answer CHANGED
@@ -1,5 +1,7 @@
1
1
  [【初心者が注意したい】Java配列コピーの方法まとめ](https://eng-entrance.com/java-array-copy)
2
2
 
3
+ ![イメージ説明](220658cb8cd7b1ec448b15bd499ae630.png)
4
+
3
5
  使ったことのない気になった内容でしたので検索してみました。
4
6
 
5
7
  分かりやすい記事があったのでリンク貼っておきますね。
@@ -12,6 +14,13 @@
12
14
 
13
15
  的外れな回答かもしれませんが見に来る方の参考にもなればと思いまして。
14
16
 
17
+ ---
18
+ 追記:
19
+ 逆説的に実体がコピーされていないということはオブジェクト参照されている。
20
+ オブジェクト参照されているのでこの方法のままではコピー出来そうに無い。
21
+ 別途イテレーションなどを使ってコピーし直す必要がありそうです。
22
+ [ シャローコピーとディープコピー](http://d.hatena.ne.jp/ariteku/20110602/1307031712)
15
23
 
24
+ ---
16
25
  ↓リンク先の説明画像です
17
26
  ![イメージ説明](ab252649e5d3ed2f5eaf44b5534ef7e2.png)

1

誤字修正

2018/08/16 07:15

投稿

opyon
opyon

スコア1009

answer CHANGED
@@ -4,11 +4,11 @@
4
4
 
5
5
  分かりやすい記事があったのでリンク貼っておきますね。
6
6
 
7
- 記事の中でのサンプルコードでは`Int[]`でディープコピーの実演をされていました。
7
+ 記事の中でのサンプルコードでは`int[]`でディープコピーの実演をされていました。
8
8
 
9
9
  質問者さんのコードでは`class Sample`をお使いのようですね。
10
10
 
11
- まずはリンク先のように`Int[]`でお試ししてみてはどうでしょうか?
11
+ まずはリンク先のように`int[]`でお試ししてみてはどうでしょうか?
12
12
 
13
13
  的外れな回答かもしれませんが見に来る方の参考にもなればと思いまして。
14
14