Java表达式可能存在多个运算符,运算符之间存在优先级的关系,级别高的运算符先执行运算,级别低的运算符后执行运算。下表列出了运算符的优先级。表中优先级栏,数字越小优先级越高,每个运算符用中文顿号分割。

表中结合性指运算符结合的顺序,通常都是从左到右。从右到左的运算符最典型的就是数值前面的正负号,例如3+-4,表达式的意义为3加-4,符号“-”首先和运算符右侧的内容结合。
表中运算符‘[]’前面没有讲到,该运算符表示声明一个数组,关于数组后面会详细讲述。
表中小括号‘()’优先级最高,表达式含有小括号的,优先执行小括号的内容,如果包含多个小括号,执行顺序是从左到右。
例如,假设变量a的值为12,下述语句的执行会有不同的结果:
(1)执行 a + 18 % 4 ,因为运算符%的优先级高于运算符+,该语句先执行取余运算,再执行加法运算,其结果为14;
(2)执行( a + 18 ) % 4 ,因为小括号的优先级最高,该语句先执行小括号里的表达式a+18,再执行取余运算,其结果为2;
(3)执行 a * ( ( a + 18 ) % 4 ),该语句括号内嵌套括号,执行顺序是先执行内层括号的运算,再执行外层括号的运算,其运算结果为24。
案例1:在PbaseUnit6项目unit包下创建PrioritySample类。代码如下:
/**
* @Title: PrioritySample.java
* @Package unit
* @Description: Java基础知识课程案例
* @author xinch
* @date 2019年12月1日
* @version V1.0
*/
package unit;
/**
* @ClassName: PrioritySample
* @Description:表达式与运算符(运算符的优先级)案例1
* @author 编程训练营
* @date 2019年12月1日
*
*/
public class PrioritySample {
/**
* @Title: main
* @Description:Java程序入口main方法
* @param @param args 参数
*
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
// 声明变量a和b并赋值
int a = 10;
int b = 4;
// 执行运算
a += ++b;
System.out.printf("a =%d\n", a);
System.out.printf("b =%d\n", b);
}
}代码结构分析
程序功能主要是演示运算符的优先级。
语句“a += ++b;”,涉及到运算符+=和++两个运算符,从运算符优先级表可知,++运算符的优先级要高于+=运算符,b应先做自增运算,然后再与a相加,结果为15。一个特例是,语句“a += b++;”,虽然++的优先级高于+=,但此语句的++是后缀式,后缀式是先使用再自增(参见算术运算符一节),因此,b先与a相加后,再做自增运算,结果为14。
程序执行结果如下图所示:
从上述结果可以看出,++运算符的优先级要高于+=运算符,b应先做自增运算,然后再与a相加,结果为15。
在实际的开发中,不需要特别去记忆运算符的优先级别,也不要刻意的使用运算符的优先级别,对于不清楚优先级的地方使用小括号辅助进行优先级管理。