Java运算符优先级指南

tra*_*god 20 java operators operator-precedence

误解Java运算符优先级是常见问题和微妙错误的来源.我很想知道即使是Java语言规范也说,"建议代码不要严格依赖于这个规范." JLS§15.7宁愿明确聪明,有没有这方面的任何有用的指导?

以下是有关该主题的一些资源:

欢迎增加或更正.

Nei*_*fey 20

就"真实世界"而言,可能公平地说:

  • 有足够的程序员知道乘法/除法优先于加法/减法,在数学上就是惯例
  • 几乎没有任何程序员能记住任何其他优先规则

因此,除了*/vs 的具体情况之外+-,我实际上只是使用括号来明确定义预期的优先级.

  • 你也可以依赖关系运算符(`<`,`<=`,`==`,`> =',`>')优先于逻辑运算符(`&&`,`||`.) (6认同)
  • 你的意思是括号还是括号'? (4认同)
  • @Neil - 与IT人员交谈时,最好坚持使用传统的IT /印刷术语.'()'是括号(或圆括号),'[]'是括号(或方括号),'{}'是大括号(或大括号). (4认同)
  • 程序员难以记住的原因是因为每种语言都略有不同. (3认同)
  • 在运算符优先级的上下文中,"括号"实际上只能表示"圆括号". (3认同)

ite*_*ter 5

另一个相关的错误来源是如何累积舍入错误.这不是运算符优先顺序问题本身,而是在以算术等效方式重新排列操作数后获得不同结果时的惊喜源.这是一个sun.com版本的David Goldberg的每个计算机科学家应该知道的浮点运算.