问题
前段时间,朋友问我一个问题,下面代码执行结果是什么?
int i = 0;
int x = 0;
while(i<10){
x = x++;
i++;
}
System.out.println(x);
我看完程序,肯定的说答案是10,但是朋友告我不对,答案是0。 相信有人跟我一样一脸懵,x++不是先进行赋值操作,在进行加1操作吗,x++整体运算完等于0,但此时x应该变成1了呀。
运行结果
抱着怀疑的态度我运行了一遍,结果如下 然而我依旧不信邪,我又用C语言执行了一边,毕竟C是世界上最牛逼的语言,结果如下
原理
为什么两种语言运行出来的结果不一样呢,一般出现这种情况大概率是语言的底层逻辑不一样 对于Java是返回自增前的结果,无论x=x++怎么执行,x始终是0,自增操作始终没有赋值给x。 对于C语言是返回自增后的结果,x会先进行自增,并且赋值给x,尽管x++结果为0,但x此时已经是进行过自增的了。 ::: tip 但是x=x++这行代码在c语言里属于未定义行为,不同的编译器会出现不同的运行结果。 :::