当多个算术运算符同时存在一个表达式中将按照运算符的优先顺序进行运算。
Java中所有运算符的优先级如下:
括号的优先级最高,如果要改变运算符的优先级要使用括号。
例子:
/**
* 运算符优先级测试
* @author 攀博课堂(www.pbteach.com)
*
*/
public class OperatorDemo12 {
public static void main(String[] args) throws InterruptedException {
int a = 4;
int b = 8;
boolean c = ++a>=5 && b--<=8;
boolean d = !c || b-->=8 && ++a<b;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}
分析:
int a = 4;
int b = 8;
1、boolean c = ++a>=5 && b--<=8;
表达式为逻辑表达式,具有短路功能,先求左边++a>=5,由于 ++在前,先算出a+1为5,5>=5为true,最终a加1,此时没有短路。
继续计算 b--<=8; 由于--在后,b的值8和8比较,b<=8为true,最终b减去1为7.
计算c,左边为true,右边为true,c为true.
第一步结束:
a = 5
b = 7
c = true
2、boolean d = !c || b-->=8 && ++a<b;
!优先级最高,!c为false.
&&优先于||,计算b-->=8 && ++a<b,先计算b-->=8,--在后,拿 b和8比较,b-->8为false,此时发生短路,++a<b不再计算,此时b最终减去1得6.
最后拿!c的值false 和 “b-->=8 && ++a<b”的值false求或,得出false。
d的结果为false。
通过第2步计算,b为6,d为false。
3、结合两步,最终得出:
5
6
true
false
请看下边的程序:
//输出一个字符a
System.out.println('a');
/字符a和一个整数相加,会把a所对应的ASCII值与整数相加,得出一个整数98。
System.out.println('a'+1);
输出:
a
98
'a'对应ASCII值是97,所以'a'+1等于98。
如果字符内容超出ASCII范围怎么办呢?
比如:'攀'、'博'、'网'三个字就超出了ASCII值范围。
请看下边的程序:
System.out.println('攀');
System.out.println('攀'+1);
输出:
攀
25857
字符和整数相运算是将字符转成Unicode编码值,由Unicode值与整数相运算。 ‘攀’字所对应的Unicode编码是\u6500(十六进制表示),将6500十六进制转成十进制是25856,将其加1得到25857。