当多个操作符同时存在时,操作符的优先级决定了表达式的计算顺序。Java 对计算顺序做了特别规定。最简单的规则就是先乘除后加减。程序员经常会忘记其他优先级规则,然后用括号来明确指定计算顺序。例如,下面的语句 [1] 和语句 [2]:
// operators/Precedence.java
public class Precedence {
public static void main(String[] args) {
int x = 1, y = 2, z = 3;
int a = x + y - 2/2 + z; // [1]
int b = x + (y - 2)/(2 + z); // [2]
System.out.println("a = " + a);
System.out.println("b = " + b);
}
}
/* 输出:
a = 5
b = 1
*/
这两个语句看起来基本相同,但是从输出结果可以知道,由于使用了括号,它们具有迥然不同的含义。
需要注意的是,System.out.println() 语句中使用了操作符+
。在这里+
意味着字符串连接,而且如果需要,它还会执行字符串转换。当编译器看到一个字符串后面紧跟着一个+
和一个非 String 类型的元素时,它会尝试着将这个非 String 类型的元素转换为 String 类型。如同上文输出结果展示的那样,它成功地为变量 a 和 b 处理了从 int 到 String 的类型转换。