Is the left-to-right order of operations guaranteed in Java?

后端 未结 10 1212
温柔的废话
温柔的废话 2021-01-04 10:16

Consider this function:

public static final int F(int a, int b) {
    a = a - 1 + b;
    // and some stuff
    return a;
}

Is it required

相关标签:
10条回答
  • 2021-01-04 10:35

    According to here:

    Operators on the same line have equal precedence. When operators of equal precedence appear in the same expression, a rule must govern which is evaluated first. All binary operators except for the assignment operators are evaluated from left to right; assignment operators are evaluated right to left.

    So yes.

    0 讨论(0)
  • 2021-01-04 10:39

    Yes:

    http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.7

    The JVM will intepret

    x = input - 1 + q;
    

    as

    x = (input - 1) + q;
    
    0 讨论(0)
  • 2021-01-04 10:41

    Actually, I will disagree with the rest of the answers. The JLS §15.7 that people are referring to discusses the evaluation of operands. That is, in the expression

    x = foo() - 1 + bar()
    

    , in which order will the methods be invoked.

    The relevant section is §15.7.3, which specifies

    An implementation may not take advantage of algebraic identities such as the associative law to rewrite expressions into a more convenient computational order unless it can be proven that the replacement expression is equivalent in value and in its observable side effects [...]

    Since the expression x = x - 1 + q is equivalent in all ways to x = x + q - 1, a conforming implementation is allowed to rewrite the expression (if it for some reason should decide that is more efficient).

    0 讨论(0)
  • 2021-01-04 10:43

    It would actually not be the JVM implementation that matters, since they just execute a list of instructions from the class file.

    0 讨论(0)
  • 2021-01-04 10:51

    Yes, although the bigger question is does it really matter? Subtraction and addition have the same precedence in any scientific mathematical operation and are commutable. That is:

    x = input - 1 + q;

    is the same as

    x = input + q - 1;

    0 讨论(0)
  • 2021-01-04 10:52

    Yes it always will, even though it wouldn't affect the result of adding / subtracting anyway.

    0 讨论(0)
提交回复
热议问题