2012-10-19 62 views
3

我想知道,是哪兩個語句之間的差異,這些可能是簡單的加號在字符串中做什麼?

 String ss="myname"; 
     char[] charArray = ss.toCharArray(); 
     for (char character : charArray) 
     { 
      System.out.println(+character);//Statements are here what does plus refers here: 

      System.out.println(character); //Statements are here: 

    } 

我的代碼沒有錯誤,但毫無疑問它是如何工作的輸出?這裏發生了什麼?

如果你願意投票,請讓我知道原因。

+0

第一個SOP打印字符的ascii值,但不知道如何。應該檢查JLS。 – Vikdor

+0

正確它打印ASCII謝謝你的回覆:) @Vikdor – gks

回答

9

你必須記住,char仍然是一個數字類型。

+這裏是一元加號,它沒有...沒有。 +xx具有相同的值。

然而+xintx在你的情況下,char。所以它在這種情況下的效果是調用println(int),而不是println(char)有效地打印您的char的數值而不是由它表示的字符。

之所以+xint在於Unary Operator +執行所謂Unary Numeric Promotion其中「歸一化」的數值的類型intlongfloatdouble適當。

一個更容易理解這條線的版本將是

System.out.println((int) character); 

它存在大多的是對稱的關於一元減(-x),返回其操作數的否定值的語言。

有關詳細信息,請參閱this page(在「一元運算符」下)。

+0

這與ASCII字符只使用8位中的7個是否有關係,這樣一元加號清除MSB「以防萬一」嗎? – 2012-10-19 10:59:43

+0

@VladLazarenko:不,這裏沒有任何事情發生。首先'char'是一個16位的UTF-16編碼單元,而不是ASCII字符,其次'+'返回原來的值,根本不需要修改。 –

+0

感謝您的很好的解釋:)@ JoachimSauer – gks

相關問題