目录
在Java编程中,运算符是用于执行各种数学和逻辑运算的符号。熟练掌握Java运算符的使用将帮助你写出更高效、更灵活的代码。在本篇博客中,我们将详细介绍Java中常见的运算符,并提供示例和解释。
一、算术运算符
运算符 | 含义 |
+(加法) | 用于将两个操作数相加。 |
-(减法) | 用于从第一个操作数中减去第二个操作数。 |
*(乘法) | 用于将两个操作数相乘。 |
/(除法) | 用于将第一个操作数除以第二个操作数。 |
%(取余) | 用于获取两个操作数相除后的余数。 |
++(自加) | 用于将操作数的值增加1。 |
--(自减) | 用于将操作数的值减少1。 |
示例:
int a = 5;
int b = 3;
//相乘
int sum = a + b; // sum的值为8
//相加
int difference = a - b; // differece的值为2
//相乘
int product = a * b; // product的值为15
//整除
int quotient = a / b; // quotient的值为1
//取余
int remainder = a % b; // remainder的值为2
// 前缀自加
int result1 = ++a; // a的值会增加为6,result1的值为6
// 后缀自加
int result2 = b++; // b的值会增加为4,result2的值为3
// 前缀自减
int result3 = --a; // a的值会减少为5,result3的值为5
// 后缀自减
int result4 = b--; // b的值会减少为3,result4的值为4
二、关系运算符
运算符 | 说明 |
==(相等) | 用于比较两个操作数是否相等,如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值相等,也都将返回 true。 如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象就会返回true。 Java 也支持两个 boolean 类型的值进行比较。 |
!=(不相等) | 用于比较两个操作数是否不相等,如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值不相等,也都将返回 true。 如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系 时才可以比较,只要两个引用指向的不是同一个对象就会返回 true。 |
>(大于) | 用于检查第一个操作数是否大于第二个操作数,只支持左右两边操作数是数值类型。如果前面变量的值大于后面变量的值, 则返回 true |
<(小于) | 用于检查第一个操作数是否小于第二个操作数,只支持左右两边操作数是数值类型。如果前面变量的值小于后面变量的值,则返回 true。 |
>=(大于等于) | 用于检查第一个操作数是否大于等于第二个操作数,只支持左右两边操作数是数值类型。如果前面变量的值大于等于后面变量的值, 则返回 true。 |
<=(小于等于) | 用于检查第一个操作数是否小于等于第二个操作数,只支持左右两边操作数是数值类型。如果前面变量的值小于后面变量的值,则返回 true。 |
示例:
int a = 5;
int b = 3;
boolean isEqual = (a == b); // false
boolean isNotEqual = (a != b); // true
boolean isGreater = (a > b); // true
boolean isLess = (a < b); // false
boolean isGreaterOrEqual = (a >= b); // true
boolean isLessOrEqual = (a <= b); // false
三、逻辑运算符
运算符 | 用法 | 含义 | 说明 |
&& | a&&b | 短路与 |
ab
全为
true
时,计算结果为
true
,否则为 false。
|
|| | a||b | 短路或 |
ab
全为
false
时,计算结果为
false
,否则为 true。
|
! | !a | 逻辑非 |
a
为
true
时,值为
false
,
a
为
false
时,值 为 true。
|
| | a|b | 逻辑与 |
ab
全为
false
时,计算结果为
false
,否则为 true。
|
& | a&b | 逻辑或 |
ab
全为
true
时,计算结果为
true
,否则为 false。
|
- && 与 & 区别:如果 a 为 false,则不计算 b(因为不论 b 为何值,结果都为 false)。
- || 与 | 区别:如果 a 为 true,则不计算 b(因为不论 b 为何值,结果都为 true)。
注意:短路与(
&&
)和短路或(
||
)能够采用最优化的计算方式,从而提高效率。在实际编程时,应 该优先考虑使用。
示例:
boolean a = true;
boolean b = false;
int num = 10;
//短路与
boolean result1 = (a && (num++ > 5)); // 第二个操作数不被求值,因为第一个操作数已经确定true
System.out.println(result1); // 输出:true
System.out.println(num); // 输出:10,没有递增
boolean result2 = (b && (num++ < 20)); // 第二个操作数不被求值,因为第一个操作数已经确false
System.out.println(result2); // 输出:false
System.out.println(num); // 输出:10,没有递增
//短路或
boolean result3 = (a || (num++ > 5)); // 第二个操作数不被求值,因为第一个操作数已经确定true
System.out.println(result3); // 输出:true
System.out.println(num); // 输出:10,没有递增
boolean result4 = (b || (num++ < 20)); // 第二个操作数不被求值,因为第一个操作数已经确false
System.out.println(result4); // 输出:true
System.out.println(num); // 输出:11,递增了
//逻辑非
boolean result5 = !a; // 对a取反,返回false
System.out.println(result5); // 输出:false
boolean result6 = !b; // 对b取反,返回true
System.out.println(result6); // 输出:true
//逻辑或
boolean result7 = (a | (num++ > 5)); // 对两个操作数都进行求值
System.out.println(result7); // 输出:true
System.out.println(num); // 输出:11,递增了
boolean result8 = (b | (num++ < 20)); // 对两个操作数都进行求值
System.out.println(result8); // 输出:true
System.out.println(num); // 输出:12,递增了
//逻辑与
boolean result9 = (a & (num++ > 5)); // 对两个操作数都进行求值
System.out.println(result9); // 输出:true
System.out.println(num); // 输出:11,递增了
boolean result10 = (b & (num++ < 20)); // 对两个操作数都进行求值
System.out.println(result10); // 输出:false
System.out.println(num); // 输出:12,递增了
四、赋值运算符
运算符 | 说明 |
= | 将右侧表达式的值赋给左侧的变量。 |
+= | 将左侧变量与右侧表达式的值相加,并将结果赋给左侧变量。 |
-= | 将左侧变量减去右侧表达式的值,并将结果赋给左侧变量。 |
*= | 将左侧变量乘以右侧表达式的值,并将结果赋给左侧变量。 |
/= | 将左侧变量除以右侧表达式的值,并将结果赋给左侧变量。 |
%= | 将左侧变量对右侧表达式的值取余,并将结果赋给左侧变量。 |
示例:
String name = "John"; // 将字符串"John"赋给变量name
int a = 10;
a += 5; // 等同于 a = a + 5,结果为15
int b = 20;
b -= 3; // 等同于 b = b - 3,结果为17
int c = 4;
c *= 2; // 等同于 c = c * 2,结果为8
int d = 15;
d /= 6; // 等同于 d = d / 6,结果为2
int e = 10;
e %= 3; // 等同于 e = e % 3,结果为1
五、位运算符
运算符 | 说明 |
& | 对两个操作数的每一位执行逻辑与操作,只有当两个操作数对应位置的位都为1时,结果的对应位为1,否则为0。 |
| | 对两个操作数的每一位执行逻辑或操作,只有当两个操作数对应位置的位都为0时,结果的对应位为0,否则为1。 |
^ | 对两个操作数的每一位执行逻辑异或操作,当两个操作数对应位置的位不同时,结果的对应位为1,否则为0。 |
~ | 对操作数的每一位执行逻辑非操作,将1变为0,将0变为1。 |
示例:
int a = 5; // 二进制为 0101
int b = 3; // 二进制为 0011
int result = a & b; // 二进制结果为 0001,即1
System.out.println(result); // 输出:1
int result = a | b; // 二进制结果为 0111,即7
System.out.println(result); // 输出:7
int result = a ^ b; // 二进制结果为 0110,即6
System.out.println(result); // 输出:6
int result = ~a; // 二进制结果为 1010,即-6(由于二进制补码的表示方式,最高位1表示负数)
System.out.println(result); // 输出:-6
运算符 | 说明 |
<< | 将操作数的所有位向左移动指定的位数,右侧空出的位用0填充。 |
>> | 将操作数的所有位向右移动指定的位数,左侧空出的位用符号位(即最高位)的值填充(正数用0填充,负数用1填充)。 |
>>> | 将操作数的所有位向右移动指定的位数,左侧空出的位用0填充。 |
示例:
int a = 5; // 二进制为 0101
int result = a << 2; // 二进制结果为 010100,即20
System.out.println(result); // 输出:20
int b = 7; // 二进制为 0111
int result = b >> 2; // 二进制结果为 0001,即1
System.out.println(result); // 输出:1
int c = -7; // 二进制为 11111111111111111111111111111001
int result = c >>> 2; // 二进制结果为 00111111111111111111111111111110,即1073741822
System.out.println(result); // 输出:1073741822
六、三元运算符
在Java中,三元运算符(也被称为条件运算符)是一种简洁的条件表达式语法。它使用 “?” 和 “:” 作为分隔符,可以根据一个条件的真假来选择两个可能的结果之一。
语法:
条件 ?表达式1 : 表达式2
执行过程:
- 首先,计算条件的值。
- 如果条件为true,则执行表达式1,并返回表达式1的结果。
- 如果条件为false,则执行表达式
- 并返回表达式2的结果
示例
int a = 5;
int b = 10;
int max = (a > b) ? a : b;
System.out.println(max); // 输出:10,因为a不大于b,所以返回b的值
七、运算符的优先级
优先级 | 运算符 | 结合性 |
1 |
()、[]、{}
| 从左向右 |
2 |
!、+、-、~、++、--
|
从右向左
|
3 |
*、/、%
| 从左向右 |
4 |
+、-
| 从左向右 |
5 |
«、»、>>>
| 从左向右 |
6 |
<、<=、>、>=、instanceof
| 从左向右 |
7 |
==、!=
| 从左向右 |
8 |
&
| 从左向右 |
9 |
^
| 从左向右 |
10 |
|
| 从左向右 |
11 |
&&
| 从左向右 |
12 |
||
| 从左向右 |
13 |
?:
| 从右向左 |
14 |
=、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>=
| 从右向左 |