一、简介
在 Java 中,运算符起着至关重要的作用,这些符号可以使 Java 程序可以进行各种数学计算、条件判断和数据处理,从而实现丰富的功能和逻辑。
二、算术运算符
运算符 | 功能 |
---|---|
+ | 加法运算符,将两个数相加 |
- | 减法运算符,将两个数相减 |
* | 乘法运算符,将两个数相乘 |
/ | 除法运算符,将两个数相除 |
% | 取余运算符,求两个数相除的余数 |
public class Main {
public static void main(String[] args) {
int a = 15;
int b = 4;
// 算法运算符
System.out.println("加法运算符:" + (a + b));
System.out.println("减法运算符:" + (a - b));
System.out.println("乘法运算符:" + (a * b));
System.out.println("除法运算符:" + (a / b));
System.out.println("取余运算符:" + (a % b));
}
}
运行结果:
加法运算符:19
减法运算符:11
乘法运算符:60
除法运算符:3
取余运算符:3
三、自增自减运算符
在 Java 中,自增自减运算符是一种特殊的算数运算符,它的操作数只要有一个就可以了,也叫一目运算符或单目运算符,具体有以下分类:
- 自增运算符 ++:
- 前置自增( ++a ):先将变量的值加 1,然后再使用变量的值进行其他操作。
- 后置自增( a++ ):先使用变量的值进行其他操作,然后再将变量的值加 1。
- 自减运算符 --:
- 前置自减( --a ):先将变量的值减 1,然后再使用变量的值进行其他操作。
- 后置自减( a-- ):先使用变量的值进行其他操作,然后再将变量的值少 1。
public class Main {
public static void main(String[] args) {
int a = 10;
// 自增自减运算符
System.out.println("后置自增:" + a++);
System.out.println("前置自增:" + ++a);
System.out.println("后置自减:" + a--);
System.out.println("前置自减:" + --a);
}
}
运行结果:
后置自增:10
前置自增:12
后置自减:12
前置自减:10
四、关系运算符
关系运算符主要用于比较两个值之间的关系,其结果只能是布尔值(true 或 false),一般用于逻辑处理和循环控制语句当中。
运算符 | 功能 |
---|---|
> | 大于运算符,判断左侧值是否大于右侧值 |
< | 小于运算符,判断左侧值是否小于右侧值 |
>= | 大于等于运算符,判断左侧值是否大于等于右侧值 |
<= | 小于等于运算符,判断左侧值是否小于等于右侧值 |
== | 等等于运算符,用于判断两个值是否相等 |
!= | 不等于运算符,用于判断两个值是否不相等 |
public class Main {
public static void main(String[] args) {
int a = 10;
int b = 20;
// 关系运算符
System.out.println("大于运算符:" + (a > b));
System.out.println("小于运算符:" + (a < b));
System.out.println("大于等于运算符:" + (a >= b));
System.out.println("小于等于运算符:" + (a <= b));
System.out.println("等等于运算符:" + (a == b));
System.out.println("不等于运算符:" + (a != b));
}
}
运行结果:
大于运算符:false
小于运算符:true
大于等于运算符:false
小于等于运算符:true
等等于运算符:false
不等于运算符:true
⚠️在关系运算符中,需要特别注意 等等于运算符 的细节,对于不同类型的比较数据,它的功能也不一样,具体如下:
- 基本数据类型:比较的是两个基本类型变量的值是否相等。
- 引用数据类型:比较的是两个引用类型变量的引用是否相等,换句话说比较的是两个变量是否指向同一个的对象。如果要比较对象的内容是否相等,需要重写对象的 equals 方法。
五、逻辑运算符
逻辑运算符主要用于对布尔值进行逻辑判断,其结果只能是布尔值(true 或 false),一般用于逻辑处理和循环控制语句当中。
运算符 | 功能 |
---|---|
&& | 逻辑与运算符,当两个布尔值都是 true 时,结果才为 true |
|| | 逻辑或运算符,当两个布尔值都是 false 时,结果采薇 false |
^ | 逻辑异或运算符,当两个布尔值都是一样的,返回 false,不一样的,返回 true |
! | 逻辑非运算符,将当前的布尔值取反,true 变 false,false 变 true |
public class Main {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
// 逻辑运算符
System.out.println("逻辑与运算符:" + (a && b));
System.out.println("逻辑或运算符:" + (a || b));
System.out.println("逻辑异或运算符:" + (a ^ b));
System.out.println("逻辑非运算符:" + (!a));
}
}
运行结果:
逻辑与运算符:false
逻辑或运算符:true
逻辑异或运算符:true
逻辑非运算符:false
⚠️在上述的 逻辑与运算符 和 逻辑或运算符 都具有短路特性,具体如下:
- 逻辑与:如果第一个操作数为 false,那么就不会再判断第二个操作数,直接返回 false。
- 逻辑或:如果第一个操作数为 true,那么就不会再判断第二个操作数,直接返回 true。
六、位运算符
位运算是针对整数类型数据的一种运算符,相对于算数运算符,位运算符的效率会高很多。算数运算符可能需要先将数据进行一些格式转换或复杂的计算逻辑,而位运算可以直接针对二进制位进行操作,更加高效。
运算符 | 功能 |
---|---|
& | 按位与运算符,对应的二进制位都为 1,结果为 1,否则为 0 |
| | 按位或运算符,对应的二进制位只要有一个 1,结果就为 1,二进制位都为 0,结果才为 0 |
^ | 按位异或运算符,对应的二进制位不同时,结果为 1,相同时为 0 |
〜 | 按位取反运算符,将操作数的二进制位取反,0 变 1,1 变 0 |
<< | 左移运算符,将操作数的二进制位向左移动指定的位数,右边补 0,左移一位相当于乘二 |
>> | 右移运算符,将操作数的二进制位向右移动指定的位数,如果操作数为正数,左边补 0;如果为负数,左边补 1, 右移一位相当于除二 |
>>> | 无符号右移运算符,将操作数的二进制位向右移动指定的位数,无论操作数的正负,左边都补 0,右移一位相当于除二 |
public class Main {
public static void main(String[] args) {
int a = 5; // 二进制:0000 0101
int b = 4; // 二进制:0000 0100
// 位运算符
System.out.println("按位与运算符:" + (a & b)); // 二进制:0000 0100 = 4
System.out.println("按位或运算符:" + (a | b)); // 二进制:0000 0101 = 5
System.out.println("按位异或运算符:" + (a ^ b)); // 二进制:0000 0001 = 1
System.out.println("按位取反运算符:" + (~a)); // 二进制:1000 0110 = -6
System.out.println("左移运算符:" + (a << 2)); // 二进制:0001 0100 = 20
System.out.println("右移运算符:" + (a >> 1)); // 二进制:0000 0010 = 2
System.out.println("无符号右移运算符:" + (a >>> 1)); // 二进制:0000 0010 = 2
}
}
运行结果:
按位与运算符:4
按位或运算符:5
按位异或运算符:1
按位取反运算符:-6
左移运算符:20
右移运算符:2
无符号右移运算符:2
⚠️位运算是 Java 运算符中最难的一种,平时开发不太常见,一般在阅读源码或者参加一些算法比赛中可能会遇到,这边要求至少要知道位运算有什么作用。
七、赋值运算符
赋值运算符用于将一个值赋值给一个变量或者进行一系列运算后在赋值给变量。
运算符 | 功能 |
---|---|
= | 赋值运算符,将等号右边的值赋给左边 |
+= | 将右侧的值与左侧变量的值相加,结果赋给左侧变量 |
-= | 将右侧的值从左侧变量的值中减去,结果赋给左侧变量 |
*= | 将左侧变量的值乘以右侧的值,结果赋给左侧变量 |
/= | 将左侧变量的值除以右侧的值,结果赋给左侧变量 |
%= | 将左侧变量的值与右侧的值进行取余运算,结果赋给左侧变量 |
&= | 将左侧变量的值与右侧的值进行按位与运算,结果赋给左侧变量 |
|= | 将左侧变量的值与右侧的值进行按位或运算,结果赋给左侧变量 |
^= | 将左侧变量的值与右侧的值进行按位异或运算,结果赋给左侧变量 |
<<= | 将左侧变量的值左移指定的位数,结果赋给左侧变量 |
>>= | 将左侧变量的值右移指定的位数,结果赋给左侧变量 |
>>>= | 将左侧变量的值无符号右移指定的位数,结果赋给左侧变量 |
public class Main {
public static void main(String[] args) {
int num = 10;
// 赋值运算符
num += 5;
System.out.println("+=:" + num);
num -= 3;
System.out.println("-=:" + num);
num *= 2;
System.out.println("*=:" + num);
num /= 4;
System.out.println("/=:" + num);
num %= 5;
System.out.println("%=:" + num);
num = 20;
System.out.println("=:" + num);
}
}
运行结果:
+=:15
-=:12
*=:24
/=:6
%=:1
=:20
⚠️赋值运算只要知道上述几种即可,后面的用的非常少,作为一个知识面知道即可。
八、条件运算符
在 Java 中,条件运算符也称为三目运算符,其作用是根据一个条件表达式的结果来选择两个值中的一个,一般用于简化简单的 if else 语句。
语法:条件表达式 ? 表达式1 : 表达式2
解释:如果条件表达式为 true,则返回是表达式1的值;如果条件表达式为 false,则返回是表达式2的值。
public class Main {
public static void main(String[] args) {
int a = 10;
int b = 20;
// 三目运算符
System.out.println("最大值:" + (a > b ? a : b)); // 判断两个数的最大值
}
}
运行结果:
最大值:20
九、字符串连接符
在 Java 中,字符串连接符是加号(+)。它可以将两个字符串或一个字符串与其他类型的数据连接起来。
public class Main {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = " World!";
// 字符串连接符
System.out.println("连接符:" + str1 + str2);
}
}
运行结果:
连接符:Hello World!
十、运算符优先级
当多个运算符出现在一个表达式中,谁先谁后呢?这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别很大。
优先级 | 运算符 |
---|---|
1 | ( ) [ ] . |
2 | ! ~ ++ – |
3 | * / % |
4 | + - |
5 | << >> >>> |
6 | < <= > >= instanceof |
7 | == != |
8 | & |
9 | ^ |
10 | | |
11 | && |
12 | |
13 | ? : |
14 | = += -= *= /= %= &= |
15 | , |
运算符的优先级不需要全部记住,只要知道当你想要改变运算符执行的顺序时, 小括号的优先级是最高的即可。