正值招工季,我来给大家出一道题,关于i++的问题int x = 0;
for(int i=0; i<100; i++) {
x = x++;
}
System.out.println(x);
x = 0;
x = x++ + ++x;
System.out.println(x);自己复制后运行吧,骚年,欢迎大家踊跃讨论。javai++
for(int i=0; i<100; i++) {
x = x++;
}
System.out.println(x);
x = 0;
x = x++ + ++x;
System.out.println(x);自己复制后运行吧,骚年,欢迎大家踊跃讨论。javai++
int y = x++;
System.out.println(y); // 10;
System.out.println(x); // 11;
int a = 10;
int b = ++a;
System.out.println(a); // 11;
System.out.println(b); // 11;
/*
我搜了网上的讲解大多事理解为
x++; 先在x所在的表达式中使用x的当前值,后让x加1
++x; 先把x的值加1,然后在运算中使用x的新值
我也是这样理解的
*/
在看他的代码:
int x = 0;
for(int i=0; i<100; i++) {
// 这里x = x++;这句还没运行完,x的值为0;运行完了之后x的值不是应该加1的吗?
x = x++;
}
System.out.println(x);x = 0;
// 这一句就完全不知道怎么拆开来解释了
x = x++ + ++x;
System.out.println(x);
x=x++; x=0时 x++的值是0,即x=0,但是不是还要执行x的自增么?自增之后x应该是1了啊,为什么x还是0 求解释
x = tmp;//x重新复制为0
x = tmp;//x重新复制为0
x=0
x = x++ + ++x;
等价于
tmp =x++ + ++x;//2
x=tmp;不过x++ + ++x我也不清楚为什么等于2,总感觉为1,这样的运算好像跟编译器有关,结果不一定
x = tmp;//x重新复制为0
x=0
x = x++ + ++x;
等价于
tmp =x++ + ++x;//2
x=tmp;不过x++ + ++x我也不清楚为什么等于2,总感觉为1,这样的运算好像跟编译器有关,结果不一定
x=0
x = x++ + ++x;运算总是从左往右一步一步:
上面等价于:int x = 0;
int tmp1 = x++;//tmp1=0,x=1;
int tmp2 = ++x;//tmp2=2,x=2,++的优先级高
x = tmp1 + tmp2;//x=2
c#生成的结果和java是一样的,
但是VC++2012,的结果是100
以a=a++为例
1 先把a赋给a++这个表达式
2 a=a+1
3 a++这个表达式赋值给a如果是++a 就把 12顺序反下
好吧,我只是吐个槽