当多个操作符同时存在时,操作符的优先级决定了表达式的计算顺序。Java 对计算顺序做了特别规定。最简单的规则就是先乘除后加减。程序员经常会忘记其他优先级规则,然后用括号来明确指定计算顺序。例如,下面的语句 [1] 和语句 [2]:

    1. // operators/Precedence.java
    2. public class Precedence {
    3. public static void main(String[] args) {
    4. int x = 1, y = 2, z = 3;
    5. int a = x + y - 2/2 + z; // [1]
    6. int b = x + (y - 2)/(2 + z); // [2]
    7. System.out.println("a = " + a);
    8. System.out.println("b = " + b);
    9. }
    10. }
    11. /* 输出:
    12. a = 5
    13. b = 1
    14. */

    这两个语句看起来基本相同,但是从输出结果可以知道,由于使用了括号,它们具有迥然不同的含义。

    需要注意的是,System.out.println() 语句中使用了操作符+。在这里+意味着字符串连接,而且如果需要,它还会执行字符串转换。当编译器看到一个字符串后面紧跟着一个+和一个非 String 类型的元素时,它会尝试着将这个非 String 类型的元素转换为 String 类型。如同上文输出结果展示的那样,它成功地为变量 a 和 b 处理了从 int 到 String 的类型转换。