java中的序列点

时间:2010-12-04 09:54:22

标签: java sequence-points

是否保证执行以下java代码:

int i = getA() + getB();

getA()是否始终在getB()之前执行,正如普通人所期望的那样?

1 个答案:

答案 0 :(得分:13)

是的,确实如此。从JLS,第15.7节:

  

Java编程语言保证运算符的操作数似乎以特定的评估顺序进行评估,即从左到右。

     

建议代码不要严格依赖此规范。当每个表达式最多包含一个副作用时,代码通常更清晰,作为其最外层的操作,并且当代码不依赖于由于从左到右的表达式评估而出现哪个异常时,代码就更清晰了。

     

...

     

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

还有:

  

Java编程语言还保证在执行操作本身的任何部分之前,操作符的每个操作数(条件运算符&&,||和?:)除外似乎都要完全评估。