Java - 一道關於整型和字符類型相加的題目


題目

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碼值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM