运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等操作。
运算符分为下面六类:
- 算数运算符
- 赋值运算符
- 关系运算符(比较运算符)
- 逻辑运算符
- 位运算符(需要二进制知识基础)
- 三元运算符
算数运算符
算数运算符是对数值类型的变量进行运算的,在 Java 程序中使用的非常多
这里举几个比较反直觉的例子:
public class Main {public static void main(String[] args) {// 10 和 4 都是 int ,表达式的结果也是 int ,所以就等价于整除。而不是数学上的 2.5System.out.println(10 / 4); // 2// 10.0 是 double 类型,表达式的结果会自动提升为 double ,所以结果是 2.5System.out.println(10.0 / 4); // 2.5// % 取模 / 取余// % 的本质,看下公式: a % b = a - a / b * b// -10 % 3 = -10 - (-10) / 3 * 3 = -1// 10 % -3 = 10 - 10 / -3 * -3 = 1// -10 % -3 = -10 - (-10) / -3 * -3 = -1System.out.println(-10 % 3); // -1System.out.println(10 % -3); // 1System.out.println(-10 % -3); // -1}}
关系运算符
关系运算符的结果都是 boolean 类型,要么是 true ,要么是 false 。常用于 if / switch / for / while 作为判断条件。
逻辑运算符 / 位运算符
1)短路与 && ,短路或 || ,取反 !
2)逻辑与 & ,逻辑或 | ,逻辑异或^
& 和 && 的区别
public class Main {public static void main(String[] args) {int a = 5;int b = 10;// &&:如果第一个条件为 false ,后面的条件不再判断if (a > 5 && ++b <= 10) {System.out.println("条件为真");}System.out.println(a); // 5System.out.println(b); // 10// &:如果第一个条件为 false ,后面的条件仍然会判断if (a > 5 & ++b <= 10) {System.out.println("条件为真");}System.out.println(a); // 5System.out.println(b); // 11}}
| 和 || 的区别
public class Main {public static void main(String[] args) {int a = 5;int b = 10;// ||:如果第一个条件为 true ,后面的条件不再判断if (a >= 5 || ++b <= 10) {System.out.println("true");}System.out.println(a); // 5System.out.println(b); // 10// |:如果第一个条件为 true ,后面的条件仍然会判断if (a >= 5 & ++b <= 10) {System.out.println("true");}System.out.println(a); // 5System.out.println(b); // 11}}
赋值运算符
赋值运算符就是将某个值(可以是字面量,也可以是表达式,也可以是变量),赋给指定的变量。
赋值运算符分以下两种:
- 基本赋值运算符:=
- 复合赋值运算符:+=、-=、*=、/=、%=
三元运算符
表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动类型转换)。
三元运算符可以转换成 if - else 语句。
public class Main {public static void main(String[] args) {int a = 10;int b = 11;int res = a > b ? a++ : b--;System.out.println(res); // 11System.out.println(a); //10System.out.println(b); // 10}}
运算符优先级
运算符有不同优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优于下一行。
只有单目运算符、赋值运算符是从右向左运算的。
