Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么java和c中增量运算符的行为不同_Java_C_Post Increment - Fatal编程技术网

为什么java和c中增量运算符的行为不同

为什么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,然后将其设置回原始值

在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,然后将其设置回原始值

发件人:

递增/递减运算符可以应用于操作数之前(前缀)或之后(后缀)。代码结果为++;和++结果;结果都将增加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