为什么java和c中增量运算符的行为不同
在c中: 在Java中:为什么java和c中增量运算符的行为不同,java,c,post-increment,Java,C,Post Increment,在c中: 在Java中: int a = 33; a = a++; printf("\n\t a :%d",a); // it'll print 34 为什么后增量在C中正确工作,而在Java中不正确?好问题 a++和+++a之间有区别。在Java中(至少),每个变量都会递增变量,但表达式所表示的值是不同的 int a = 33; a = a++; System.out.printf("\n\t a :%d",a); // it'll print 33 因此,将a增加1,然后将其设置回原始值
int a = 33;
a = a++;
printf("\n\t a :%d",a); // it'll print 34
为什么后增量在C中正确工作,而在Java中不正确?好问题
a++
和+++a
之间有区别。在Java中(至少),每个变量都会递增变量,但表达式所表示的值是不同的
int a = 33;
a = a++;
System.out.printf("\n\t a :%d",a); // it'll print 33
因此,将a
增加1,然后将其设置回原始值
发件人:
递增/递减运算符可以应用于操作数之前(前缀)或之后(后缀)。代码结果为++;和++结果;结果都将增加1。唯一的区别是前缀版本(++result)的计算结果为递增值,而后缀版本(result++)的计算结果为原始值。如果您只是执行一个简单的递增/递减操作,那么选择哪个版本并不重要。但是,如果在较大表达式的一部分中使用此运算符,则选择的运算符可能会产生显著的差异
-C部分是未定义的行为,您不能依赖它(可以打印任何内容)。Java部分符合Java规范,即您看到的结果是预期的行为。在
C
中,您发布的代码具有未定义的行为。它不能“正常工作”,因为该代码没有正确行为的定义!虽然在您的环境中它打印34,但在其他环境中它将打印33。-对于Java部分,因为它们是不同的语言。它在哪里说它们必须是一样的?这真的有必要吗?这个问题在网站上已经被回答过很多次了,相反,你应该把这个问题标记为一个重复的问题。这并不能真正回答OP的问题,这就是为什么C和Java之间似乎存在差异的原因。
int i = 0;
System.out.println(i++); // 0
int j = 0;
System.out.println(++j); // 1