2015-12-15 101 views
0

我猜輸出1這個代碼,但不是說我得到的輸出49,爲什麼我會得到完全不同的輸出

的代碼是

public static void main(String[] args) { 
     String str = "1+21"; 
     int pos = -1; 
     int c; 
     c = (++pos < str.length()) ? str.charAt(pos) : -1; 
     System.out.println(c); 
    } 

回答

6

someCondition ? a : b的結果是ab的常見類型。在這種情況下,str.charAt(pos)(一個字符)和-1(一個int)的常見類型是int。這意味着您的str.charAt(pos)值正被轉換爲int - 基本上,它被轉換爲unicode代碼點,在這種情況下,它與其值爲ASCII的值相同。

49是字符'1'的代碼點。

如果你想獲得爲C的數字「1」,最容易做的事情是要減去的代碼點「0」:

c = (++pos < str.length()) ? (str.charAt(pos) - '0') : -1; 

這工作,因爲所有號碼在unicode中是順序的,從'0'開始。減去這些炭「0」的價值 - 也就是說,INT 48 - 你得到你想要的值:

'0' = 48 - 48 = 0 
'1' = 49 - 48 = 1 
... 
'9' = 57 - 48 = 9 
+0

非常感謝您的幫助 – nithinalways

0

charAt方法返回您傳遞位置的char值。在這裏你將這個分配給一個int變量。所以這意味着你得到了特定char值的整數表示。 您的情況

int c = "1+21".charAt(0); -> actual char is 1 and the ASCII of that is 49 
相關問題