Java 为什么';在System.out.println()中是否有字符增量?

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)或(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);    //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