i++跟++i的问题

int i = 10;
i = i++;
System.out.print(i);

显示结果是i==10,
解释是i先赋值,然后自身再加一,那加一之后的i,在哪,可以打印出来吗?

阅读 3.4k
9 个回答

i = i++可以展开成:

int temp = i; temp -> 10
i++; // i -> 11
i = temp; // i -> 10

看一下反汇编代码就更清楚了:

clipboard.png

解释如下:

 0: bipush        10       // 读入10
 2: istore_1                // 将10存入i
 3: iload_1                    // 读取i到临时变量
 4: iinc          1, 1        // i自增
 7: istore_1                // 将临时变量的值赋值给i

你可以试试下面的

System.out.print(i++);
System.out.print(++i);
新手上路,请多包涵

i++ 返回原来的值,++i 返回加1后的值。

新手上路,请多包涵

需要个地址指向他,才能看到他

新手上路,请多包涵

var i = 10;
i++;
console.log(i);
//11 这里就是你要的++后的值

不出意外的话,i++的值应该是保存在操作数栈里面的.

let a = 10;
console.log(a++);
console.log(a);
console.log(a);
>>> 10
>>> 11
>>> 11

这是 javascript 的解读,应该一致。
a++ -> a = a + 1;
第一条输出是输出 a 自加前的值,即 console.log(a),但是这是一个表达式,输出 a 后运算也结束,指
向的值就变了,于是第二第三条输出 console.log(a) 则是运算后的值。
不知道我这样解释对不对,= ̄ω ̄=

代码宇宙的回答不错,可以参考。平时使用只需要记住i=i++;i不变就行了。

++后的没有赋值,打印不出来吧...找大佬帮你答一下

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题