java中的序列点

mil*_*lan 5 java sequence-points

是否有保证的以下java代码的执行顺序:

int i = getA() + getB();
Run Code Online (Sandbox Code Playgroud)

getA()之前一直执行的getB(),因为任何一般人所期望的?

Jon*_*eet 13

是的.从JLS,第15.7节:

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

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

...

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

并且:

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