是否保证执行以下java代码:
int i = getA() + getB();
getA()
是否始终在getB()
之前执行,正如普通人所期望的那样?
答案 0 :(得分:13)
是的,确实如此。从JLS,第15.7节:
Java编程语言保证运算符的操作数似乎以特定的评估顺序进行评估,即从左到右。
建议代码不要严格依赖此规范。当每个表达式最多包含一个副作用时,代码通常更清晰,作为其最外层的操作,并且当代码不依赖于由于从左到右的表达式评估而出现哪个异常时,代码就更清晰了。
...
在评估右侧操作数的任何部分之前,二元运算符的左侧操作数似乎已完全评估。
还有:
Java编程语言还保证在执行操作本身的任何部分之前,操作符的每个操作数(条件运算符&&,||和?:)除外似乎都要完全评估。