为什么System.out.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 ++)打印增加的字符,而另外两个呢?
首先,我假设因为你说System.out.println
的增量有效,你真的指定了:
char char1 = 'a';
编辑
为了回应问题的变化( char1+1;
=> char1 += 1;
),我看到了问题。 输出是
a 98 b
98
显示,因为char a
被提升为int
(二进制数字提升)以添加1.因此a
变为97( 'a'
的ASCII值)和98结果。
但是, char1 += 1;
或者char1++
不执行二进制数字提升,因此它按预期工作。
引用JLS,第5.6.2节“二进制数字促销” :
应用扩展基元转换(第5.1.2节)来转换由以下规则指定的一个或两个操作数:
如果任一操作数的类型为double,则另一个操作数转换为double。
否则,如果任一操作数的类型为float,则另一个操作数转换为float。
否则,如果任一操作数的类型为long,则另一个操作数转换为long。
否则, 两个操作数都将转换为int类型 。
(强调我的)
您没有将char1+1
的加法结果赋给char1
。 所以
char1 = char1 + 1;
要么
char1 += 1;
char1++;
是正确的。
好的,首先,修复代码的格式:
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:对于此行,您正在执行整数加法。 java中的char作为unicode字符保存。 字母a的unicode值映射到数字97.(请注意,这也对应于a的ASCII值)。 当在不匹配的类型之间执行Java中的算术运算时,较小/不太精确的值类型的值将被“升级”为较大的类型(这是非常不精确的陈述)。 因此,在执行添加之前将char“升级”为int,结果也是int。 考虑到这一点,从+1开始的97导致98被打印就不足为奇了。
3:在这种情况下,我们再次打印char的值,因此打印一个字符。 这次我们看到之前生成的98被隐式地转换回一个角色。 同样,毫无疑问,a的下一个最高数字映射是b,所以我们看到ab打印。
尝试这个。
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);