有人可以向我解釋爲什麼下面的代碼在Java中編譯好嗎?用char和整數字面值在Java中的整數算術
char c = 'a' + 10;
爲什麼這不等於下面的,它不會編譯?
int i = 10;
char c = 'a' + i;
Java語言規範(第3.10.1節)指出「字面一個整數是long
類型的,如果它是與ASCII字母L或l(ELL)後綴;否則,它是int
類型(§4.2的0.1)。」第4.2.2節提到「數字運算符,其結果爲int
或long
類型的值。」所以根據我的理解,添加的結果應該是int
,它不能被分配給char
變量c
。
但是,它編譯得很好(至少在Sun JDK 1.6.0 release 17和Eclipse Helios中)。
也許是一個人爲的例子,但它被用在我一直在教的Java入門課程中,現在我發現我不明白它爲什麼起作用。
感謝所有回答。對於任何感興趣的人來說,語言規範(賦值轉換)的第5.2節實際上都會說「另外,如果表達式是byte類型的short表達式(第15.28節),則爲short,char或int:...縮小原語轉換如果變量的類型是byte,short或char,並且常量表達式的值可以用變量的類型表示,則可以使用它。「 – Ben 2010-09-10 09:09:40
如果你像我一樣碰巧遇到了這個問題,因爲你想知道如何將索引字符轉換爲字符串,在這裏你可以去;當'i = 2'時,String.valueOf((char)('a'+ i))'返回字符串「c」。 – JohnnyLambada 2013-10-23 23:01:11