Java 为什么';在System.out.println()中是否有字符增量?
在上面,为什么(char1+1)或(char++)不打印递增的字符,而其他两个打印?您没有将加法的结果Java 为什么';在System.out.println()中是否有字符增量?,java,char,increment,println,Java,Char,Increment,Println,在上面,为什么(char1+1)或(char++)不打印递增的字符,而其他两个打印?您没有将加法的结果char1+1分配给char1。所以 char1=char1+1 或 char1+=1 char1++ 是正确的。首先,我假设因为您说System.out.println中的增量有效,所以您确实指定了: char char1 = 'a'; System.out.println(char1); //prints char 1 System.out.println(char1+1);
char1+1
分配给char1
。所以
char1=char1+1代码>
或
char1+=1代码>
char1++代码>
是正确的。首先,我假设因为您说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;
=>char1+=1;
)时,我看到了这个问题。
输出是
char char1 = 'a';
显示98
是因为字符a
已升级为int
(二进制数字升级)以添加1。因此a
变为97(表示'a'
的ASCII值),结果为98
然而,char1+=1
或char1++
不执行二进制数字升级,因此它按预期工作
引述:
加宽原语转换(§5.1.2)用于转换或
由以下规则指定的两个操作数:
如果其中一个操作数的类型为double,则另一个操作数将转换为double
否则,如果其中一个操作数为float类型,则转换另一个操作数
漂浮
否则,如果其中一个操作数的类型为long,则转换另一个操作数
太久了
否则,两个操作数都转换为int类型
(强调我的)试试这个
a
98
b
反而
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);
这将产生输出:
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
现在,让我们详细了解对println()的每个调用:
1:这只是获取名为char1的字符句柄并打印它。它被分配了字母a(注意分配中a周围的单引号,表示字符)。毫不奇怪,这会打印角色a
2:对于此行,您正在执行整数加法。一个角色被当作一个角色来持有。字母a的unicode值映射到数字97。(请注意,这也对应于a的ASCII值)。当用Java在不匹配的类型之间执行算术运算时,较小/不太精确的值类型的值将“升级”为较大的类型(这是非常不精确的说明)。因此,在执行加法之前,字符被“升级”为int,并且结果也是int。考虑到这一点,从a+1得到的97将导致打印98也就不足为奇了
3:在本例中,我们再次打印字符的值,因此打印字符。这一次,我们之前看到的98被隐式地转换回一个字符。同样,毫不奇怪,a的下一个最大数字映射是b,因此我们看到a打印了b。这甚至不是有效的Java-1一旦代码的格式正确(可编译),它对我来说就可以了。这是一个打字错误,它就在我的代码中。@DanielBall那么你为什么在这里重新键入代码?中缀+
运算符(如x+y
中的)不是复制和粘贴,而是生成一个计算结果为新值的表达式,但不会更改分配给x
或y
的值。这与++
或-->
(前缀或后缀)运算符不同。也许您应该解释一下为什么它们是正确的:)(以及为什么他的代码不正确),当然,除非您无法解释为什么您的是正确的,而他的是错误的……对不起,我回复了一个提问者的愚蠢评论,但它已经被删除了。这解释了char+1中的数字,但不是我的另一个问题。。。char++似乎什么都不做,如果我在char是a时输入char++,它只打印a,但是如果我输入char++;在我执行println之前,它是有效的。这就是post increment操作符所做的。它递增,但表达式的值是旧值,'a'
。噢!我明白了,我需要使用预增量。正确的。谢谢:)我完全忘记了那个细微的差别。
a
98
b