2012-10-19 31 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

相关问题