java基础 ++n 与 n++?

各位,我知道这个问题有可能是十分好笑的,毕竟它过于基础,但是在我实操的过程中却发现了一些有意思的不同。
首先,我们知道++n是先对n进行+1操作,然后再进行运算;而n++则是先拿旧值进行元素,再对n进行+1操作,那么在下面的代码中n++ + n++ 难道不应该是3 + 3 才对吗?为何最终是3 + 4 ?第二个n++难道不是返回其原来的值3吗?

int n = 3;

System.out.println(n++ + n++);


回答:

曾经刷过几十道关于n++, 与++N 的各种排列组合的学生以及工作几年的老油条, 认为考试与面试出这种问题几乎毫无意义!!!! 学到了完全置之不理是最好的态度

前提条件: 这个代码是从左向右的

n++ 实际上是 n = n+1, 会改变n的值

在题主的描述中, 就是最后一句话理解错了, n++ + n++ ---> (n++) + n++, 确实第一个个n++ 是用3计算的, n++ + n++--->3++ + n++, 然后此时在进行中间的加法时, n是进行了加一后的: n++则是先拿旧值进行元素,再对n进行+1操作, 因此在进行中间加法时, 需要取n++, 但此时的n, 是前半部分n++后的n, 就是 4 , n 的值已经该变了, n 为 4 , 在进行第二个n++时, 先取 n ,就是 4 然后计算因此是 3 + 4

int total = n++ + n++, 这个语句执行完毕后, n 为 5, 加了两次 N+ 1嘛

不用纠结n++, ++n, 没有啥意义, 还浪费时间, 考试出这种题目也很没有水平(都是泪), 直接跳过就好了, 知道 是 n = n+1, 就好了

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。


回答:

左侧比右侧先求值,在计算右侧的的 n++ 的时候,左侧 n++ 的计算已经全部结束,包括降新的 n 保存回去。所以在计算右侧的 n++ 时,n 已经是 4 了。

15.7.1. Evaluate Left-Hand Operand First

The left-hand operand of a binary operator appears to be fully evaluated before any part of the right-hand operand is evaluated.

If the operator is a compound-assignment operator (§15.26.2), then evaluation of the left-hand operand includes both remembering the variable that the left-hand operand denotes and fetching and saving that variable's value for use in the implied binary operation.

以上是 java基础 ++n 与 n++? 的全部内容, 来源链接: utcz.com/p/945051.html

回到顶部