2012-07-11 92 views
3

當我運行下面的代碼,它不會給我輸出,我已經例外。考慮下面的代碼片段:sysout中的concat char給出奇怪的輸出?

public class T 
{ 
    public static void main(String arg[]) 
    { 
     char a='3'; 
     System.out.println(a+a); 
    } 
} 

這裏的輸出是:102

請能有人解釋給我嗎?

+3

你應該看一下[15.18的規格。添加運算符](http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.18),順便說一句,字符實際上是16位無符號整數,表示UTF- 16(範圍000000 - 00007F匹配ascii)。 – 2012-07-11 10:05:39

回答

4

+操作者施加一個隱含的類型轉換該兩個字符轉換成它們的數字的ASCII表示,其是51.

所以表達式

'3'+'3' 

也可以看作是

51 + 51 

是102

我假設你想有什麼結果"33"這不是任何字符以上,但一個字符串。要做到這一點,你可以例如簡單地隱含表達的結果轉換成字符串:

char c = '3'; 
string s = "" + c + c; 

另一種可能性是,以方便StringBuilder類:

char c = '3'; 
String s = new StringBuilder().append(c).append(c).toString(); 
0

a + a被解釋爲公式。

以來的「3」 ASCII值是51,51 + 51 = 102

0

你可以看到C + C爲51 + 51,因爲它需要'3'的ascii碼。 如果要打印33,那麼你可以試試這個:

System.out.println(String 

.format( 「%C +%C」,C,C));