2011-05-09 89 views
2
int[] test = {0,1,2,3,4,5}; 
    int[] before = test; 
    System.out.println(before[2]); 
    test[2] = 65; 
    System.out.println(before[2]); 

第一System.out的打印和它應該,但第二打印。我已經用這種語言編程了一年多了,據我所知這不會發生!任何幫助?指定陣列以新的變量,改變原始改變新

int first = 9; 
    int second = first; 
    System.out.println(second); 
    first = 10; 
    System.out.println(second); 

上述打印上兩行中的代碼。

+0

在這兩種情況下,這都按預期工作。您正將值分配給變量,並且它們正在打印分配給它們的值。我希望你不會在C風格的引用(int *)和Java之間混淆。 – CoolBeans 2011-05-09 03:36:53

+0

我不知道C,實際上Java是我唯一使用的。幸運的是,我在一個悠閒的項目中遇到了這個問題,而不是重要的。 – kieve 2011-05-09 03:44:14

回答

3

當你這樣做before = test;,之前僅僅是test陣列,NO新陣列已創建並分配給test參考。所以當你看before[i]的價值時,你基本上看test[i]的價值,反之亦然。 before只是test的別名。這就是爲什麼在第二次打印你得到65.

檢查這text思考在Java書,它一定會幫助你。

0

這是正常現象。如果你想複製一個數組,那麼你需要複製它。

class ArrayCopyDemo { 
    public static void main(String[] args) { 
     char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e', 
       'i', 'n', 'a', 't', 'e', 'd' }; 
     char[] copyTo = new char[7]; 

     System.arraycopy(copyFrom, 2, copyTo, 0, 7); 
     System.out.println(new String(copyTo)); 
    } 
} 

通過http://download.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

0

對於整型的,你是正確的,他們不相互引用。但是當你使用數組時,它們被認爲是對象,所以當你做了before = test時,它們在內存中指向同一個對象。