2016-07-26 7 views
0

Java(おそらくかなり小さい= P)について私が理解しているところでは、Javaはプリミティブ値をオブジェクトと異なる方法で扱います。私が考えることの1つの例は、プリミティブが値渡しされ、オブジェクトが参照値を介して渡されるということです。これを拡張するプリミティブによる浅いコピー

、私はint型の配列を作成するコードを実装している、と浅いがint型の新しい配列にそれを上書きコピー:

public class Test { 
    public static void main(String[] args){ 
    int[] array = {2,3,4,5}; 
    int[] copy = array; 
    copy[1] = 0; 

    for (int i : copy){ 
     System.out.print(i);} 
    System.out.println(); 

    for (int i : array){ 
     System.out.print(i);} 
} 
} 

ただし、出力は次のとおりです。

2045 
2045 

だから私が困惑しているのは、なぜ両方のアレイが変わるのかです。元の配列のコピーを作成したとき、(プリミティブを扱っているので)要素の値だけをコピーしたと思いましたか?

+0

いいえ、あなただけの同じ配列を指す第二の基準を作成しました。 – Stultuske

+0

これはあまり意味があります。ですから、新しいint []コピーを作成して配列から個々の要素をコピーしてforループでコピーすると、これは起こりません。確かに – javanewbie

+0

。もう少しwokですが、それはあなたの問題を解決するだろう – Stultuske

答えて

1

あなたはアレイをまったくコピーしませんでした。あなたがしたのは、参照番号arraycopyをメモリ内の同じ配列を指すようにすることでした。したがって、ある参照を介して配列を変更すると、もう一方の参照は同じ変更を指し示します。

+0

はい私は間違いをしたと参照をコピーしたようです。ありがとうございました! – javanewbie

0

アレイはオブジェクトです。あなたは

int[] copy = array; 
両方 copy

arrayを設定すると、同じオブジェクトを参照してください。あなたの更新

copy[1] = 0; 

更新 "both"。

0

あなたが割り当てcopy[1] = 0を作ったとき、あなたはcopy、あなたはまた、次の文

int[] copy = array; 

を持っているので、copyが参照配列を取る位置1に移動し、値0を代入するためにJavaを語りましたarrayはメモリ内の同じアレイを指します。あなたは実際には浅いコピーを作ったことはなく、同じ配列を指すように別の変数だけを割り当てました。

あなたは、配列のコピーを作成する場合は、あなたが試みることができる:

int[] copy = Arrays.copyOf(array, array.length); 
関連する問題