JAVA语言的运算符的优先级
表达式的运算次序取决于表达式中各种运算符的优先级。优先级高的先运算,优先级低的后运算,另外还可用括号“()”改变表达式的运算次序。
Jave 语言规定的运算符优先级如表3-3所示,表中排在上面的运算符有较高的优先级,同一行中的运算符的优先级相同。如果在表达式中有括号(表达式中只使用圆括号),又有函数,则优先计算括号中的内容,其次再进行函数运算。
表3-3 Jave语言的运算符优先级
按照表3-3中的规定,下列表达式有惟一的求值次序:
(1)a + b*c
(2)a=b||c
(3)a + b < c&&d==e
(4)a=8-2*3<4&&5<2
表达式(1)中,运算符“*”比“+”的优先级高,所以先求b*c的值之后再与a的值相加。
表达成(2)中,逻辑运算符“||”比赋值运算符优先级高,所以先对b||c求值,然后将结果赋给变量a。
表达式(3)中,四个运算符中“+”优先级最高、“<” 次之,“&&”最低,所以求值次序是先求出式子a + b的值,然后将这个值与c的值作“<”比较,然后求d==e的值,最后做“&&”运算。
表达式(4)中,先求出2*3的值为6,然后求出8-6的值为2,再求出2<4的值为true,5<2的值为false,然后再求出true && false的值为false,最后将false赋值给变量a。
在Java语言中要记住这么多运算符的优先级是比较困难的,而且上述表达式的写法比较难以理解并容易产生错误。因此在写程序时应该养成一种良好的习惯:除非是简单的直观运算,应该尽量使用括号。上述表达式(1)是可取的,表达式(2)、(3)和(4)应分别改写为a=(b||c)、((a+b) 和a=( ((8-2*3) <4)&&(5<2))。
另外,要尽量不写太长的表达式,过长的表达式容易引起对求值次序的误解。
例如:2*Math.sqrt(Math.pow(3,2)*25)+4
↑ ↑ ↑ ↑ ↑ ↑
⑤ ④ ③ ① ② ⑥
运算的优先顺序如小圆圈的数字所示,这个表达式的运算结果是34.0。
对于表达式再作以下几点说明:
(1)数学上的表达式a≥b≥c及-5≤x≤5,用JAVA语言表示,必须分别写成(a>=b) && (b>=c)及(-5<=x) && (x<=5)。
(2)逻辑运算a || b是好的表示形式。但若写成a||b则是不好的写法,在操作数与运算符之间至少留一空格可以使程序更加清晰。
(3)有时为了表达清楚,可以引进多余的括号,如:x>=5 || y <0是正确的表示形式,但引进括号后(x>=5) || (y <0),可以表达得更加清楚。
0