2014-11-21 70 views
1

我初學編程,並在Java中運行此代碼提取字符從字符串在Java中

String demo = "This is first string"; 
char ch[]= demo.toCharArray(); 
System.out.println(ch); 

輸出:

This is first string 

同時,

System.out.println("result is "+ch); 

輸出: - (顯示與對象存儲器相關的哈希碼)

result is: someHashcode 

1)爲什麼我們對它們都有不同的輸出(上面提到的代碼)?這裏實際發生了什麼。

而在另一方面

int num[]={1,2,3,4}; 
System.out.println(num); 

輸出: -

somehashcode 

2)這不是工作在字符數組的情況下(像首次提到上面的代碼),並給輸出作爲哈希碼,爲什麼?

+0

根據您以前的問題判斷,您似乎並不熟悉[接受答案](http://meta.stackexchange.com/a/5235/186652)機制。簡而言之,如果某些答案解決了您的問題,則可以將其標記爲解決方案。這是一種「謝謝你」的機制(因爲它提高了回答者的聲望+15分)並且它將你的問題標記爲「已解決」。 – Pshemo 2014-11-21 21:05:52

回答

5

PrintStream重載了println字符數組的方法。當你將字符數組傳遞給它時,它就像它是一個字符串一樣打印它中的字符。

Hovewer當你傳遞其他類型的數組時,它將它視爲對象 - 它的toString()表示被打印出來。

而在這個例子:

System.out.println("result is "+ch); 

你追加數組到一個字符串字面量,因此toString形式的ch將被追加到字面這就是爲什麼你沒有得到你預期的結果。

+2

只是要清楚。 'out'是在'PrintStream'類型的'System'類中的靜態變量。所以它可以訪問'println(String)'和'println(char [])'方法(等等)。現在'PrintStream#print(char [])'方法將打印來自傳遞數組的所有字符,但如果結果是「+ ch」,則該代碼將被轉換爲一個String而不是'char []',因爲當你使用'+',其中一個操作數是String而其他操作數不是時,compler將通過使用StringBuilder連接這些值,對於非String對象,它會附加'toString()'方法的結果(對於數組,它返回類型@hexhash 。 – Pshemo 2014-11-21 21:00:54