运算符优先级问题
java中:
public class A{
public static void main(String args[]){
int i = 0, j;
for(j = 0; j < 10; j++){
i = i++;
}
System.out.println(i);
}
}
输出:0
C中:
#include "stdio.h "
main()
{
int i = 0, j;
for(j = 0; j < 10; j++)
{i = i++;}
printf( "%d\n ", i);
}
输出:10
C版的我明白,但JAVA版的不解。请高人指点
------解决方案--------------------这个问题以前看到过,好像是一道考题,
我个人的理解是这样的,
在java中,数据间的传递是值传递,而不是指针传递,(C也是这样的)
所以说i = i++;
所做的事情是可以分成2部分,
第一步:i = i; 将第二个i的值附值给第一个i
第二步:i++;将第二个i++;
而此时,++的是第二个i,而不是第一个i,
虽然,两个i都是内存中的同一块内存区,但是根据值传递的方式。
第二个i的++后的值,将不会影响到,第一个i值得结果。
不知道,我的理解对不对,希望大家指正。谢谢。
------解决方案--------------------i = i++; 这个语句里包含了 3 件事情:
1. 取出 i 的值,计算出右侧表达式的值;
2. 对变量 i 进行自增计算;
3. 把 1 中计算出的表达式的值赋给变量 i。
而这 3 件事,在不同的编译器之下,执行顺序是不一样的。在 Java 中是 1> 2> 3,在 C 中是 1
> 3> 2。所以就会出现楼主看到的现象。
不过,是不是所有的 Java 和 C 的编译器都是按照上面说的顺序工作,我也没有把握,反正没有见到过“标准规范”说明这个事情。也许就像前面 xoch421() 说的,“java的内部机制问题,不需要深究”。