模式切换
运算符
运算符是一些特殊的符号,主要用于数学函数、一些类型的赋值语句和逻辑比较。Java 中提供了丰富的运算符,如赋值运算符、算术运算符、比较运算符等。
赋值运算符
赋值运算符用于给变量赋值,将右边的值赋给左边的变量。赋值运算符使用 =
表示。
java
int a = 10;
int b = 20;
a = b;
int c = d = e = 30;
算术运算符
算术运算符用于执行基本的数学运算,如加、减、乘、除等。Java 中的算术运算符包括加法运算符 +
、减法运算符 -
、乘法运算符 *
、除法运算符 /
、取模(取余)运算符 %
。
表 Java 算数运算符
java
int a = 10;
int b = 20;
int c = a + b;
int d = a - b;
int e = a * b;
int f = a / b;
int g = a % b;
自增和自减运算符
自增运算符 ++
和自减运算符 --
是一种特殊的算术运算符,用于增加或减少变量的值。自增运算符 ++
用于将变量的值加 1,自减运算符 --
用于将变量的值减 1。
java
++a 或 --a // 表示在使用变量 a 之前,先将 a 的值加 1 或减 1
a++ 或 a-- // 表示在使用变量 a 之后,再将 a 的值加 1 或减 1
比较运算符
比较运算符用于变量之间、变量和自变量之间及其他类型的信息之间的比较。比较运算符的结果类型是 boolean
类型。当比较运算符的条件成立时,返回 true
;否则,返回 false
。
表 Java 比较运算符
java
int a = 10;
int b = 20;
boolean c = a > b;
boolean d = a < b;
boolean e = a >= b;
boolean f = a <= b;
boolean g = a == b;
boolean h = a != b;
逻辑运算符
逻辑运算符用于连接两个或多个条件,以产生逻辑结果。逻辑运算符的结果类型是 boolean
类型。逻辑运算符包括逻辑与 &&
、逻辑或 ||
、逻辑非 !
。
表 Java 逻辑运算符
短路与运算符 &&
当且仅当两个操作数均为 true
时,结果才为 true
。若左侧表达式为 false
,右侧表达式不会执行(短路特性)。
java
boolean result = (a > 0) && (b < 20); // 若 a <= 0,右侧不计算
短路或运算符 ||
只要有一个操作数为 true
,结果即为 true
。若左侧表达式为 true
,右侧表达式不会执行(短路特性)。
java
boolean result = (a < 0) || (b > 5); // 若 a < 0 为 true,右侧不计算
逻辑非运算符 !
对布尔值取反。
java
boolean result = !(a == 5); // a 等于 5 时为 false,否则为 true
非短路与运算符 &
与 &&
类似,但无论左侧结果如何,右侧都会执行。当操作数为布尔类型时作为逻辑运算符,整数类型时作为位运算符。
java
boolean result = (a < 0) & (b++ > 5); // 即使 a >= 0,b++ 仍会执行
非短路或运算符 |
与 ||
类似,但无论左侧结果如何,右侧都会执行。同样区分布尔逻辑运算和整数位运算。
java
boolean result = (a > 0) | (b++ < 5); // 即使 a > 0 为 true,b++ 仍执行
逻辑异或运算符 ^
当两个操作数不同(一个 true
,一个 false
)时结果为 true
,否则为 false
。
java
boolean result = (a > 0) ^ (b < 5); // 仅一者为 true 时结果为 true
示例代码
java
int a = 5, b = 10;
// 短路与
boolean result1 = (a > 0) && (b < 20); // true,右侧不计算(若 a <= 0)
// 非短路与
boolean result2 = (a < 0) & (b++ > 5); // false,但 b 仍递增至 11
// 短路或
boolean result3 = (a > 0) || (b < 5); // true,右侧不计算
// 逻辑异或
boolean result4 = (a > 0) ^ (b < 5); // true ^ false → true
位运算符
位运算符用于对整数类型的数据(如 int、long、short、byte 和 char)的二进制位进行操作。位运算符直接操作数据的二进制表示,因此在某些情况下可以提供高效的运算。
按位与(&)
对两个操作数的每一位进行与操作,只有当两个对应的位都为 1 时,结果位才为 1,否则为 0。
java
int a = 5; // 二进制: 0101
int b = 3; // 二进制: 0011
int result = a & b; // 结果: 0001 (十进制 1)
按位或(|)
对两个操作数的每一位进行或操作,只要两个对应的位中有一个为 1,结果位就为 1,否则为 0。
java
int a = 5; // 二进制: 0101
int b = 3; // 二进制: 0011
int result = a | b; // 结果: 0111 (十进制 7)
图 5&-4的运算过程
图 3|6的运算过程
按位异或(^)
对两个操作数的每一位进行异或操作,当两个对应的位不同时,结果位为 1,否则为 0。
java
int a = 5; // 二进制: 0101
int b = 3; // 二进制: 0011
int result = a ^ b; // 结果: 0110 (十进制 6)
图 ~7的运算过程
图 10^3的运算过程
按位取反(~)
对操作数的每一位进行取反操作,即 0 变为 1,1 变为 0。
java
int a = 5; // 二进制: 0101
int result = ~a; // 结果: 11111111111111111111111111111010 (十进制 -6)
移位操作
Java 中的移位操作符用于对操作数的二进制位进行左移或右移操作。
移位操作相当于对操作数进行乘法或除法运算,左移一位相当于乘以 2,右移一位相当于除以 2。例如,a << 1
相当于 a * 2
,a >> 2
相当于 a / 4
。
移位操作符适用的数据类型有:byte、short、char、int 和 long。
在 Java 中有以下三种移位操作符:
左移(<<):将操作数的二进制位向左移动指定的位数,右边空出的位用 0 填充。
javaint a = 5; // 二进制: 0101 int result = a << 1; // 结果: 1010 (十进制 10)
右移(>>):将操作数的二进制位向右移动指定的位数,左边空出的位用符号位填充(正数用 0,负数用 1)。
javaint a = 5; // 二进制: 0101 int result = a >> 1; // 结果: 0010 (十进制 2)
图 右移操作无符号右移(>>>):将操作数的二进制位向右移动指定的位数,左边空出的位用 0 填充,不考虑符号位。
javaint a = -5; // 二进制: 11111111111111111111111111111011 int result = a >>> 1; // 结果: 01111111111111111111111111111101 (十进制 2147483645)
三元运算符
Java 中的三元运算符是一种简洁的条件表达式,格式为:
java
条件 ? 表达式1 : 表达式2
- 条件:布尔表达式,结果为
true
或false
。 - 表达式1:条件为
true
时执行。 - 表达式2:条件为
false
时执行。
示例:
java
int a = 10;
int b = 20;
int max = (a > b) ? a : b; // 如果 a > b,max 为 a,否则为 b
System.out.println("最大值: " + max); // 输出 20
特点:
- 简洁:替代简单的
if-else
语句。 - 返回值:必须返回一个值,且
表达式1
和表达式2
的类型应兼容。
运算符优先级
Java 中的表达式就是使用运算符连接起来的符合 Java 规则的式子。运算符的优先级决定了表达式中运算执行的先后顺序。通常优先级由高到低的顺序依次是:
- 增量和减量运算。
- 算数运算
- 比较运算
- 逻辑运算
- 赋值运算
如果两个运算由相同的优先级,那么左边的表达式要比右边的表达式先被处理。
表 运算符优先级