Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
以下java代码的执行顺序是否有保证:
int i = getA() + getB();
正如任何普通人所期望的那样,总是getA()在之前执行?getB()
getA()
getB()
是的。来自 JLS,第 15.7 节:
Java 编程语言保证运算符的操作数看起来是以特定的评估顺序进行评估的,即从左到右。 建议代码不要严重依赖本规范。当每个表达式最多包含一个副作用时,代码通常会更清晰,作为其最外层的操作,并且当代码不完全依赖于表达式的从左到右求值的结果出现的异常时。 ... 在评估右侧操作数的任何部分之前,二元运算符的左侧操作数似乎已被完全评估。
Java 编程语言保证运算符的操作数看起来是以特定的评估顺序进行评估的,即从左到右。
建议代码不要严重依赖本规范。当每个表达式最多包含一个副作用时,代码通常会更清晰,作为其最外层的操作,并且当代码不完全依赖于表达式的从左到右求值的结果出现的异常时。
...
在评估右侧操作数的任何部分之前,二元运算符的左侧操作数似乎已被完全评估。
并且:
Java 编程语言还保证运算符的每个操作数(条件运算符 &&、|| 和 ? : 除外)在执行操作本身的任何部分之前似乎都已被完全评估。