題目
public class Test {
public static void main(final String[] args) {
final int a = 10;
final int b = 20;
System.out.println(a + '+' + b + '=' + (a + b));
}
}
乍一看,可能有的同學會覺得很簡單,直接給出如下答案:
10+20=30
其實這是道陷進題,很容易就看混了,正確的答案是:
164
分析
為什么答案會是164?
這是因為這里並不是字符串拼接,而是整型與字符類型的加法運算。
用一對單引號'包括起來的是字符,用一對雙引號"包括起來的是字符串。
對於字符串來說,用+拼接起來的結果還是字符串。但這道題中,用+拼接起來的是整型和字符類型,就變成了單純的加法運算。在加法運算中,數據類型會從低位自動轉換成高位,因為高位轉低位會有數據溢出導致丟失精度的風險。
當整型與字符類型相加時,字符類型會轉換成整型,也就是轉換成對應的ASCII碼值。於是乎,a + '+' + b + '=' + (a + b)就變成了10 + 43 + 20 + 61 + (10 + 20),其運算結果就是164。
題目變形
其一
public class Test {
public static void main(final String[] args) {
final int a = 10;
final int b = 20;
System.out.println(a + "+" + b + "=" + (a + b));
}
}
這道題的答案就是10+20=30了。
其二
public class Test {
public static void main(final String[] args) {
System.out.println('A');
System.out.println((int)'A');
}
}
這道題的答案是:
A
65
如果我們想知道某個字符對應的ASCII碼是多少,可以將其轉換成整型,這個值就是其ASCII碼值。