31
回答
求变量i的值是多少?java笔试
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

下面是java变量运算赋值问题:

int i = 0;
i--;
int y = i++ + ++i;
上面中y的值是0。特意查了一下,算符的优先级是++高于 +,+高于=,所以++高于=。

int i = 0;
int y = i++;
问题是上面y的值也是0。如果按照算符优先级来讲,应该是1,为什么,求解?

举报
rutine
发帖于5年前 31回/969阅

以下是问题补充:

  • @rutine :看了好多评论都是说++i是运算前加1,i++是运算后加1,这个我知道,但是y=i++ + ++i,解释起来就复杂多了。首先y为0这个结果是没错的。如果我这样解释:++i后i的值为0,i++这个本身不运算先,不过i++中的i值此时也为0,最后0+0再赋值给y,所以y的值为0。最后运算i++,所以i的值为1。但是,注意了:将y=i++ + ++i 变成 i= i++ + ++i,此时i的值是0,这样又怎样解释...? (5年前)
共有31个答案 最后回答: 5年前

stackoverflow上有2个不错,有人把汇编都贴出来了

有个人这样解释i=i++

i = 0; int tmp = i; i = i + 1; i = tmp;

http://stackoverflow.com/questions/13516689/if-i-0-why-is-i-i-0-in-c

http://stackoverflow.com/questions/4968854/is-i-i-truly-a-undefined-behavior

看来楼主是没有搞清楚i++与++i的区别。

i++是先使用再加1。

++i是先加1后再使用。

这样记就不容易弄错了。

--- 共有 4 条评论 ---
pigpig520回复 @Glogo : 呃,仅针对你的问题,他已经回答了,i++是先使用后加1,则int y=i++;此时y=0,i的值才变成了1; 5年前 回复
pigpig520回复 @Glogo : 呃,仅针对你的问题,他已经回答了,i++是先使用后加1,则int y=i++;此时y=0,i的值才变成了1; 5年前 回复
Glogo正解,也没看出这题目有啥帮助的 5年前 回复
这个面试题有啥意义
--- 共有 2 条评论 ---
恺哥回复 @rutine : 我的团队里,要是有成员写出这样的代码,我肯定让其返工,因为这样的代码可读性太差了。再高的手,看到这个表达式也得反应一会 5年前 回复
rutine我也不知道,应该考对算符优先级的熟悉程度吧 5年前 回复

引用来自“恺哥”的答案

这个面试题有啥意义
把面试当做了考试,中国的应试教育居然体现在这里了;就像7,8年前,我公司找了一个博士,后来没两天把博士辞掉了,因为他所掌握的的学院派知识在实际的生产过程中毫无用武之地。估计那个哥们解这样的题如同剪手指甲
--- 共有 1 条评论 ---
平兄博士??博士程序员,太浪费了 5年前 回复
顶部