为什么System.out.println()中没有字符增量?

时间:2013-09-06 01:04:07

标签: java char increment println

char char1 = 'a';   
System.out.println(char1);      //prints char 1
System.out.println(char1+1);    //prints char 1
System.out.println(char1++);     //prints char 1
System.out.println(char1+=1);    //prints incremented char1
char1 += 1;                     
System.out.println(char1);      //prints incremented char1

在上面,为什么不(char1 + 1)或(char ++)打印增量字符,但另外两个呢?

4 个答案:

答案 0 :(得分:7)

首先,我假设这是因为你说System.out.println中的增量有效,你确实指定了:

char char1 = 'a';

修改

针对问题的更改(char1+1; => char1 += 1;),我看到了问题。 输出是

a
98
b

98显示,因为char a被提升为int(二进制数字促销)以添加1.因此a变为97(ASCII值为'a')和98个结果。

但是,char1 += 1;char1++不执行二进制数字促销,因此按预期工作。

引用JLS, Section 5.6.2, "Binary Numeric Promotion"

  

扩展基元转换(第5.1.2节)用于转换或   两个操作数由以下规则指定:

     

如果任一操作数的类型为double,则另一个操作数转换为double。

     

否则,如果任一操作数的类型为float,则转换另一个操作数   漂浮。

     

否则,如果任一操作数的类型为long,则转换另一个操作数   很久。

     

否则,两个操作数都转换为int

(强调我的)

答案 1 :(得分:1)

您没有将加法char1+1的结果分配给char1。所以

char1 = char1 + 1;

char1 += 1; char1++; 是对的。

答案 2 :(得分:1)

好的,首先,修复代码的格式:

char char1;
char1 = 'a';
System.out.println(char1);          // print 1
System.out.println(char1 + 1);      // print 2
char1 += 1;
System.out.println(char1);          // print 3

产生输出:

a
98
b

现在,让我们详细了解每次对println()的调用:

1:这只是取名为char1的字符句柄并打印出来。它被分配了字母a(注意在赋值中围绕a的单引号,表示字符)。毫不奇怪,这会打印出角色a。

2:对于此行,您正在执行整数加法。 char in java被保留为unicode个字符。字母a的unicode值映射到数字97.(请注意,这也对应于a的ASCII值)。当在不匹配类型之间执行Java中的算术运算时,较小/不太精确的值类型的值将被“升级”为较大类型(这是非常不精确地说明的)。因此,在执行添加之前将char“升级”为int,结果也是int。考虑到这一点,从+1开始的97导致98被打印就不足为奇了。

3:在这个例子中,我们再次打印char的值,因此打印一个字符。这次我们看到之前生成的98是隐式地将返回转换为一个字符。同样,不出所料,a的下一个最高数字映射是b,所以我们看到b打印。

答案 3 :(得分:0)

试试这个。

System.out.println(char1);
System.out.println(++char1);
char1 += 1;
System.out.println(char1);

代替

char1 = a;   
System.out.println(char1);
system.out.println(char1+1);
char1 += 1;
System.out.println(char1);