2010-11-28 90 views
2

以下是我剛纔編造的一個人爲的例子,它可以幫助我理解java的內部工作原理。Java:將一個數組傳遞給println

public class Main { 

    public static void main(String[] args) { 
     int[] a; 
     a = new int[12]; 
     System.out.println(a); 


    } 
} 

這會打印出一些垃圾。由於a通過引用傳遞,我假設println獲取a的內存地址,並將其作爲字符串進行威脅。我就在這裏?你能詳細說明究竟發生了什麼嗎?謝謝。 (注:我對如何打印陣列不感興趣,我知道)

回答

5

一個數組被視爲一個對象,所以默認結果Object#toString()將被用作字符串表示。另請參閱Javadoc的此提取(請點擊鏈接):

類Object的toString方法返回一個字符串,其中包含對象爲實例的類的名稱,符號字符`@ ',以及對象的哈希碼的無符號十六進制表示。換句話說,該方法返回一個字符串等於值:

getClass().getName() + '@' + Integer.toHexString(hashCode()) 

達到你想要什麼,而使用Arrays#toString()

System.out.println(Arrays.toString(a)); 
0

是的,它是打印內存地址。請參閱Q &這裏的一節:http://www.cs.princeton.edu/introcs/14array/使用Arrays.toString(a)將數組a轉換爲String,如果要輸出數組的內容,可以打印此數字。

+1

不是內存地址,但散列碼(可能是一個地址,不能)... – 2010-11-28 15:46:08

0

println()調用toString()方法不管你傳遞給它。在數組的情況下,這會產生一些表示數組對象的散列碼。