这可能看起来很简单,但它只是偶然发现了我和我的朋友......
让我们在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将其定义为从左到右.
| 归档时间: |
|
| 查看次数: |
277 次 |
| 最近记录: |