java i=i++的解释、复杂i++组合运算的解释以及Java面试题之一自增

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
    }

如有错误,欢迎评论指正。

也欢迎大家在评论下面分享一下自己的深层见解或者看到过优秀的详细深层讲解链接。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值