2016-03-31 149 views
0

我不明白爲什麼I1.array [0] = 555是?我只是想改變ARR [0]初始化int數組

Intar I1 = new Intar(10); 

int [] arr = I1.array; 

     arr[0]=555; 

public class Intar { 

    int length; 
    int [] array; 


    public Intar(int lengt){ 

     length=lengt; 
     array=new int[lengt]; 
     Random ran =new Random(); 

     for(int i=0; i<length; i++){ 

      array[i]= ran.nextInt(100); 

**當我改編之前和之後使用的System.out.println [0] = 555 **

I1.array [11, 57, 77, 74, 50, 62, 1, 11, 23, 27] 
arr  [11, 57, 77, 74, 50, 62, 1, 11, 23, 27] 
After arr[0]=555 
I1.array [555, 57, 77, 74, 50, 62, 1, 11, 23, 27] 
arr  [555, 57, 77, 74, 50, 62, 1, 11, 23, 27] 
+1

他們成爲同一個對象。 –

回答

5

int [] arr = I1.array;不會複製陣列,它只是將參考分配給l1.arrayarr。你可以使用Arrays.copyOf(int[], int)進行復制像

int[] arr = Arrays.copyOf(l1.array, l1.array.length); 
0
Intar I1 = new Intar(10); 

創建一個Intar對象,使用構造公共Intar(INT lengt),這則initilizes的Intar對象的字段是10個隨機數組號,和一個長度= 10。

當編寫

int [] arr = I1.array; 

你告訴ARR引用存儲在I1的場稱爲陣列(10個隨機陣列的對象ly生成的數字)。所以當你設置arr [0] = 555時,你也將I1.array的第0個元素設置爲555。

你必須明白的是I1.array持有對存儲在Intar對象中的數組的引用。現在arr引用與I1.array引用的對象相同的對象。

例如:

public class Foo { 

    int val; 
    public Foo(int val){ 
     this.val = val; 
    } 
    int getVal(){ 
     return this.val; 
    } 

} 

然後,我們可以這樣做:

public static void main(String[] args) { 
    Foo a,b; 

    a = new Foo(5); 
    b = a; 
    b.val = 5; 
    System.out.println(a.getVal()); 
} 

5將輸出爲b現在引用,我們改變了的B,由此我們改變了值的值一個。