我猜輸出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);
}
我猜輸出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);
}
someCondition ? a : b
的結果是a
和b
的常見類型。在這種情況下,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
charAt
方法返回您傳遞位置的char
值。在這裏你將這個分配給一個int
變量。所以這意味着你得到了特定char值的整數表示。 您的情況
int c = "1+21".charAt(0); -> actual char is 1 and the ASCII of that is 49
非常感謝您的幫助 – nithinalways