java中i++和++i的问题

        今天同学给我看了个题,题目如下:
 

int i = 1;
int j = i++;
System.out.println(j);

以前没关注过此类问题,单纯认为java中i++就是先运算后赋值,++i就是先赋值后运算。而上述代码结果为1,于是去网上学习了相关知识。

知乎上有个用反编译观察底层源码的,我相关知识还没掌握,就不做讲述了,就讲讲简单通俗的。

在java中可以把++i理解为先自增,然后返回增加后的值。i++理解为先自增然后返回增加前的值,底层源码也是这样的,返回的依然是增加前的值。同时变量也是一个表达式,表达式的运算规则是从左到右的。

所以上述代码,int j = i++先自增然后返回自增前的值,结果还是1。同理再看几题。

int i = 1;
int j = i++ + ++i;
System.out.println(j);

根据上述原理,先对i++运算,i先自增再返回自增前的值,表达式变为int j = 1 + ++j,此时i已经变为了2,再对i自增,返回自增后的值,结果为3,所以最后表达式为1+3=4.

int i = 1; 
int j = (2 * i++) + i;
System.out.println(j);

此题首先从左到右运算,先算括号内的,(2 * i++),i++ 首先i自增返回自增前的值,为1,表达式变为(2 * 1),此时i已经变为了2,所以结果为2 + 2 = 4.

int i = 1; 
int j = i + (2 * i++);
System.out.println(j);

此题同理,从左到右,i = 1,所以表达式变为int j = 1 + (2 * i++),后面仍然为(2 * 1),所以结果为3.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

才疏学浅的小缘同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值