优先级
当一个表达式中存在多个操作符时,操作符的优先级就决定了各部分的计算顺序。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+"b="+b);
}
}/*Output:
a = 5 b = 1
*///:~
这两个语句看起来大体相同,但是从输出就可以看出他们具有截然不同的含义,而这正是使用括号的结果。
请注意,System.out.println()语句中包含”+“操作符。在这种上下文环境中,”+“意味着”字符串连接“,并且如果必要,它还要执行”字符串转换“。当编译器观察到一个String后面紧跟一个”+“,而这个后面又紧跟一个非String类型的元素时,就会尝试着将这个非String类型的元素转换为String。正如在输出中所看到的,它成功地将a和b从int转换为String了。