Java 条件运算符与运算符优先级
条件运算符
条件运算符格式:
(条件表达式)? 表达式1:表达式2
说明:条件表达式是boolean类型的结果,根据boolean的值选择表达式1或表达式
如果运算后的结果赋给新的变量,要求表达式1和表达式2为同种或兼容的类型
int i = (1 == 2 ? 100 : 200); System.out.println(i);//200 boolean mariied = false; System.out.println((mariied ? "已婚" : "未婚")); //未婚 double d1 = (1 > 2) ? 1 : 2.01; System.out.println(d1);//2.01 ; int num = 21; System.out.println(num > 0 ? true : num + " 不是正数");// true
练习1、获取两个数中的较大值
//获取两个数的最大值 int m1 = 10; int m2 = 11; int m3 = 15; int max = m1 > m2 ? m1 : m2; System.out.println(m1 + " 和 " + m2 + " 中的最大值是 " + max); //求三个数中的最小是 int tempMin = m1 < m2 ? m1 : m2; int min = tempMin < m3 ? tempMin : m3; System.out.println("三个数中最小值是 " + min); //今天是周四,8 天后是周几? int week = 4; week += 8; week %= 7; System.out.println("今天周二,8天后是 " + ((week == 0) ? "日" : week));
与if-else的转换关系
凡是可以使用条件运算符的地方,都可以改写为if-else结构。反之,不成立。
开发中,如果既可以使用条件运算符,又可以使用if-else,推荐使用条件运算符。因为执行效率稍高。
//if-else实现获取两个数的较大值 int i1 = 10; int i2 = 20; int max;//声明变量max,用于记录i1和i2的较大值 if(i1 > i2){ max = i1; }else{ max = i2; }
运算符有不同的优先级,所谓优先级就是在表达式运算中的运算符顺序。上一行中的运算符总是优先于下一行的。
优先级 |
运算符说明 |
Java运算符 |
1 |
括号 |
()、[]、{} |
2 |
正负号 |
+、- |
3 |
单元运算符 |
++、--、~、! |
4 |
乘法、除法、求余 |
*、/、% |
5 |
加法、减法 |
+、- |
6 |
移位运算符 |
<<、>>、>>> |
7 |
关系运算符 |
<、<=、>=、>、instanceof |
8 |
等价运算符 |
==、!= |
9 |
按位与 |
& |
10 |
按位异或 |
^ |
11 |
按位或 |
| |
12 |
条件与 |
&& |
13 |
条件或 |
|| |
14 |
三元运算符 |
? : |
15 |
赋值运算符 |
=、+=、-=、*=、/=、%= |
16 |
位赋值运算符 |
&=、|=、<<=、>>=、>>>= |
开发建议:
- 不要过多的依赖运算的优先级来控制表达式的执行顺序,这样可读性太差,尽量使用()来控制表达式的执行顺序。
- 不要把一个表达式写得过于复杂,如果一个表达式过于复杂,则把它分成几步来完成。例如: (num1 + num2) * 2 > num3 && num2 > num3 ? num3 : num1 + num2;