当前位置: 首页 > 后端技术 > Java

你真的会 i++吗

时间:2023-04-02 00:40:15 Java

你真的了解i++吗?.println(i);System.out.println(j);System.out.println(k);}第一次看到这个题目的时候,觉得很简单。本以为是正常的pre-++和post-++问题,没想到隐藏了这么多坑。一开始我计算的结果是i=5,j=2,k=15。我是怎么计算的?经过4次++,所以i为5,j=i++时,i为2,因为是后位++,所以++在赋值后进行,所以j=2,k=3+4*3结果是15,没想到我全错了,希望大家理所当然地避开本题JVM虚拟机关于指令部分的pre-++和post-++问题的考点.运算符的优先级是i=i++,因为i的值在入栈前是1,++出栈后,局部变量的i值变成2,但是=赋值操作会赋值栈中的值为i,所以i的结果为1intj=i++;和上面的一样i=i++!此时i的值为2,然后运行如下:intk=i+++ii++;="2+33=11i一开始就是值2,当i被放入操作数栈时,++i=3,此时运算的数的值为3,i++的值与i也是3,所以最后的结果=11正确的结果是:i=4,j=1,k=11总结赋值=最终计算=从右从左到右加载的值压入操作数依次入栈,实际先计算哪一个,取决于运算符优先级自增自减操作都是直接修改变量的值,不经过操作数栈的最终赋值,临时结果也是存储在操作数栈中的建议:阅读《JVM 虚拟机规范》关于指令