Java vs C输出

sg8*_*g88 4 c java

这可能看起来很简单,但它只是偶然发现了我和我的朋友......

让我们在java中使用以下代码片段

//........

int a=10;
a= a-- + a--;
System.out.print("a="+a);
//........
Run Code Online (Sandbox Code Playgroud)

在c

//........

int a=10;
a= a-- + a--;
printf("a= %d",a);
//.......
Run Code Online (Sandbox Code Playgroud)

在前一种情况下,你在C中输出为19,你得到它为18. c中的逻辑是可以理解的,但在java中?

在java中如果它喜欢

int a=10;
a=a++;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,输出为10.

那么逻辑是什么?

hrn*_*rnt 13

a = a-- + a-- 导致C中的未定义行为.C未定义应首先评估哪个减量.

a--求值为a的值,然后递减a,所以在Java中a = a-- + a--求值如下:

a =(10,递减a)+(9,递减a)

第二个操作数是9,因为第一个术语导致a递减.

总结:使用该表达式,C不定义评估顺序.Java将其定义为从左到右.