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

Dan*_* B. -3 java increment char 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
Run Code Online (Sandbox Code Playgroud)

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

rge*_*man 7

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

char char1 = 'a';
Run Code Online (Sandbox Code Playgroud)

编辑

为了回应问题的变化(char1+1;=> char1 += 1;),我看到了问题.输出是

a
98
b
Run Code Online (Sandbox Code Playgroud)

98节目了,因为炭a被提升到一个int(二进制数值提升)加1,因此a成为97(为ASCII值'a')和98分的结果.

但是,char1 += 1;或者char1++不执行二进制数字提升,因此它按预期工作.

引用JLS,第5.6.2节"二进制数字促销":

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

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

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

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

否则,两个操作数都将转换为int类型.

(强调我的)