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