String test = (String)String.valueOf(((char) 0 + 65));
System.out.println(test);
test = "A";
System.out.println(test);
第一個產生65個,另一個產生A.它們應該產生相同的東西。這些打印語句爲什麼會有所不同?
String test = (String)String.valueOf(((char) 0 + 65));
System.out.println(test);
test = "A";
System.out.println(test);
第一個產生65個,另一個產生A.它們應該產生相同的東西。這些打印語句爲什麼會有所不同?
你這樣做的順序是錯誤的。首先你將零投射到char
,並且你添加65,這是隱含投射到int
。您首先需要添加值,然後進行演員。
String test = String.valueOf((char)(0 + 65));
然後代碼產生預期的結果:
A
A
第一個表達式是相同的
(char) 0 + 65
是
`\0` + 65
這是
(int) `\0` + 65
或
65
這是因爲鑄造優先。
爲了得到一個char類型和A
你需要投你做計算
char ch = (char) (0 + 65)
System.out.println(ch);
這是由於運算符優先級(鑄造的,相對於加)後不是你所期望的。
您希望0 + 65
先發生,然後然後將結果轉換爲字符。但是,投射比添加更緊密,所以(char) 0
首先發生,然後它被添加到65.
由於這是兩個數字加在一起,結果是數字65,這是什麼被轉換成一個字符串(所以導致兩個字符串['6', '5']
您可以鑄造與周圍的算術表達式支架後發生:
String.valueOf((char)(0 + 65))