Java中的字符不会随后增量更新[重复]

Posted

技术标签:

【中文标题】Java中的字符不会随后增量更新[重复]【英文标题】:Character in Java don't update with post increment [duplicate] 【发布时间】:2019-03-18 11:16:50 【问题描述】:

我想得到下一个字符,我正在编写这样的代码

char c = 'A';
c = c++;
System.out.println(c);

打印的字符是 A。但是如果我使用带有 'c' 的预增量运算符,那么我会得到下一个字符 (B)。这是带有预增量运算符的代码。

char c = 'A';
c = ++c;
System.out.println(c);

有人能解释一下区别吗?

【问题讨论】:

c = 赋值发生在后增量之后,覆盖它。 【参考方案1】:

c = c++; 表示,首先使用当前值,然后递增。因此它首先打印当前值

c = c++;
System.out.println(c);

翻译为:

c = c; // since the actual value is returned first
System.out.println(c);

因此,值A 被打印出来。

c = ++c;
System.out.println(c);

翻译成

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

【讨论】:

如果是局部变量,则第一个示例根本不会增加 c(在赋值重置之前,字段会在很短的时间内增加,可能会导致多线程问题)跨度> @Carcigenicate,哦,我的错...感谢您的纠正:)【参考方案2】:

如果将结果分配回变量,则增量运算符没有意义。正在做

c = c++;

获取c++ 的返回值,即'A',并将其分配给c。相反,只需做

c++;  // or ++c

在你的情况下,你可能想要做

System.out.println(++c);  // prints 'B', and |c| is now 'B'

【讨论】:

很可能想要做System.out.println(++c),因为System.out.println(c++) 仍然会打印A,即使c 将被设置为'B'。 @KlitosKyriacou 谢谢,编辑了我的答案

以上是关于Java中的字符不会随后增量更新[重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Pyspark 中的更新将字符串插入增量表

通过 oozie 从 sqoop 作业增量导入不会更新 sqoop 元存储中的 incremental.last.value

PHP - 如何使用自动增量更新表(值++)[重复]

在动态更新时在java中增量访问文件?

Flink批处理中的增量迭代

Hive 中的增量更新