java i=i++的解释、复杂i++组合运算的解释以及Java面试题之一自增
int i=1;
i=i++
这个部分会先执行=右边的操作为1(因为之前的i值为1),
再执行i++操作(i的值变为2),
最后执行赋值操作i=之前算的等号右边的值1,
所以最终结果为1。
字节码为:
前两个是int i=1;
解释为:
将1这个常数值压到栈里面,
再将栈里的1赋值给了i红色线条为i=i++所对应的:
先将i加载到加载到操作数栈里,
然后局部变量表里的i自增
最后将操作数里的i的值(1)赋值给了变量表里的i
稍微改变一下:
i=i+++i+++i++;//相当于i=(i++)+(i++)+(i++);
过程为先执行等号右边的操作:(这里面又分为
1.先取i的值(1) 右边现在的情况为——>1+i++ +i++
2.再将i进行++操作,i的值变为2
3.再取i的值(2) 右边现在的情况为——>1+2+i++
4.再将i进行++操作,i的值变为3
5.再取i的值(3) 右边现在的情况为——>1+2+3
6.即等号右边算式的结果为6
7. 再将i进行++操作,i的值变为4
最后执行赋值操作,即i=等号右边的结果6
再看看Java面试题之一自增的关键部分:
int i=1;
int k;
k=i+ ++i * i++;
提示:先进行取值操作,最后再进行加减乘除操作
过程为先执行等号右边的操作:这里面又分为
1.先取i的值(1) 右边现在的情况为——>1+ ++i * i++
2.再取i的值(1),将i进行++操作,i的值变为2
3.右边现在的情况为——>1+2*i++
4.再取i的值(2) 右边现在的情况为——>1+2 * 2
5.即等号右边算式的结果为5
6. 再将i进行++操作,i的值变为3
最后执行赋值操作,即k=等号右边的结果5
我们再改变一下题目:
int i=1;
int k;
k=i+ i++ * ++i;
提示:先进行取值操作,最后再进行加减乘除操作
过程为先执行等号右边的操作:这里面又分为
1.先取i的值(1) 右边现在的情况为——>1+ i++ * ++i
2.再取i的值(1),右边现在的情况为——>1+1 * i++
3.将i进行++操作,i的值变为2
4.再取i的值(2),再将i进行++操作,i的值变为3
5.右边现在的情况为——>1+1*3
6.即等号右边算式的结果为4 )
最后执行赋值操作,即k=等号右边的结果4
下面是代码,可以复制回去试一试
public static void main(String[] args) {
int i=1;
i=i++;//先执行=右边的操作为1(应为之前的i值为1),在执行i++操作(i的值变为2),最后执行赋值操作i=之前算的等号右边的值1,所以最终结果为1;
i=i+++i+++i++;
//过程为先执行等号右边的操作:(这里面又分为1.先取i的值(1) 右边现在的情况为——>1+i++ +i++
// 2.再将i进行++操作,i的值变为2
// 3.再取i的值(2) 右边现在的情况为——>1+2+i++
// 4.再将i进行++操作,i的值变为3
// 5.再取i的值(3) 右边现在的情况为——>1+2+3
// 6.即等号右边算式的结果为6
// 7. 再将i进行++操作,i的值变为4)
// 最后执行赋值操作,即i=等号右边的结果6
//和上面是一样的i=(i++)+(i++)+(i++);
i=i++ +2;
int j=i++;
int k;
i=1;
k=i+ ++i*i++;
//提示:先进行取值操作,最后再进行加减乘除操作
//过程为先执行等号右边的操作:(这里面又分为1.先取i的值(1) 右边现在的情况为——>1+ ++i*i++
// 2.再取i的值(1),将i进行++操作,i的值变为2
// 3.右边现在的情况为——>1+2*i++
// 4.再取i的值(2) 右边现在的情况为——>1+2*2
// 5.即等号右边算式的结果为5
// 6. 再将i进行++操作,i的值变为3)
// 最后执行赋值操作,即k=等号右边的结果5
i=1;
k=i+ i++*++i;
//提示:先进行取值操作,最后再进行加减乘除操作
//过程为先执行等号右边的操作:(这里面又分为1.先取i的值(1) 右边现在的情况为——>1+ i++*++i
// 2.再取i的值(1),右边现在的情况为——>1+1*i++
// 3.将i进行++操作,i的值变为2
// 4.再取i的值(2),再将i进行++操作,i的值变为3
// 5.右边现在的情况为——>1+1*3
// 6.即等号右边算式的结果为4 )
// 最后执行赋值操作,即k=等号右边的结果4
}
如有错误,欢迎评论指正。
也欢迎大家在评论下面分享一下自己的深层见解或者看到过优秀的详细深层讲解链接。