Bitwise AND (&) expression in Java

后端 未结 2 1182
自闭症患者
自闭症患者 2021-01-24 19:17

I am debugging code that has in it expr1 & expr2 where expr1 has a side effect that affects expr2 evaluation result. I suspect that

相关标签:
2条回答
  • 2021-01-24 19:33

    JLS 3rd edition section 15.7 talks about evaluation order from left to right but asks not to rely on it crucially (except for short circuit ones)

    0 讨论(0)
  • 2021-01-24 19:34

    The evaluation order is well-defined in the specification:

    The Java programming language guarantees that the operands of operators appear to be evaluated in a specific evaluation order, namely, from left to right.

    The HotSpot optimizer should not make an optimization that results in expr2 being evaluated before expr1 if this changes the result. If it does this it is a bug.

    Note also it says:

    It is recommended that code not rely crucially on this specification.

    Your code could be rewritten more clearly as follows:

    int a = expr1;
    int b = expr2;
    int result = a & b;
    
    0 讨论(0)
提交回复
热议问题