【问题标题】:Evaluation of post and pre increment in java [closed]java中后置和前置增量的评估[关闭]
【发布时间】:2021-08-22 21:12:27
【问题描述】:

如果 k=3、l=5 和 m=10,则计算以下 Java 表达式:

++m + l - l + m + k++

答案是:

    (++10) +5 -5 +10 +3

    =11 +5 -5 +10 +3

    =24

或者,这会被评估为:

11 +5 -5 +11 +3

哪个结果是 25?

【问题讨论】:

  • 运行一下就知道了?
  • 我做了,输出为 25。
  • 这个答案是从哪里来的?
  • 不是11 + 5 - 5 + 10 +3 吗?
  • 所以您正在使用 Stack Overflow 作为其他“热门网站”的验证服务?你打算用什么来验证 Stack Overflow?这个过程在哪里结束?众所周知,您引用的特定站点充满了错误:但即使不是,它也不是 Java 语言规范,这是您应该寻找此类信息的唯一地方。紧要关头,Oracle Java 教程。您引用的页面对问题 2、3、7、10、11、14、20、26、27、33、38、40、41、48、49 的答案不正确、可疑或过时,其中一些问题是彻头彻尾的毫无意义。

标签: java pre-increment


【解决方案1】:

简单证明:IDEone(或任何本地 IDE 或 JDK)

或者直接使用jshell:

或者玩电脑/JVM(有点棘手,我知道):

expression   k   l   m   expression-result
k = 3        3   ?   ?    3  (result not used)               
l = 5        3   5   ?    5  (")               
m = 10       3   5  10   10  (")              
++m          3   5  11   11  (after increment)
l            3   5  11    5
l            3   5  11    5
m            3   5  11   11
k++          4   5  11    3  (before increment)
11+5-5+11+3  4   5  11   25

Java 语言规范15.7.1. Evaluate Left-Hand Operand First

二元运算符的左侧操作数似乎在右侧操作数的任何部分被评估之前已被完全评估。

give 表达式等价于((((++m) + l) - l) + m) + (k++)。第二次加法的左侧操作数是((++m) + l) -l,右侧操作数是m:评估左侧操作数导致m右侧操作数之前递增(@987654331 @) 被评估。

最好(也)从官方来源学习,而不是流行网站...
并且
显然您将永远不会写出这样的表达式 - 除非您想混淆任何其他开发人员(最终您自己就像该网站的作者一样:- ))

【讨论】:

  • 非常感谢您的解释,我一定会执行您的建议......
猜你喜欢
  • 2011-05-11
  • 1970-01-01
  • 2015-12-21
  • 2012-03-07
  • 2014-10-13
  • 2012-07-11
  • 2014-06-03
  • 2011-12-14
  • 1970-01-01
相关资源
最近更新 更多