JavaSE 基础语法 - 运算符
·
在 Java 中,运算符(Operator)用于对数据进行各种操作,例如:
- 数学计算
- 比较大小
- 判断条件
- 逻辑运算
- 位运算
- 赋值
- 三元表达式等
可以说:
没有运算符,就没有程序中的计算与逻辑。
一、什么是运算符?
运算符(Operator),就是用于操作数据的一种特殊符号。例如:
int a = 10;
int b = 20;
int c = a + b;
// 这里的 + 号,就是加法运算符。
Java中运算符可以分为:
| 分类 | 常见运算符 |
|---|---|
| 算术运算符 | + - * / % ++ -- |
| 赋值运算符 | = += -= *= /= %= |
| 关系运算符 | > < >= <= == != |
| 逻辑运算符 | && |
| 位运算符 | << >> >>> & |
| 三元运算符 | ?: |
二、算术运算符
算术运算符用于数学计算。
| 运算符 | 作用 |
|---|---|
| + | 加 |
| - | 减 |
| * | 乘 |
| / | 除 |
| % | 取余 |
算术运算符都是二元运算符,使用时必须要有左右两个操作数。
2.1 加法
int a = 10;
int b = 20;
System.out.println(a + b); // 输出 30
2.2 减法
System.out.println(20 - 5); // 输出 15
2.3 乘法
System.out.println(8 * 6); // 输出 42
2.4 除法
System.out.println(3 / 2);// 输出 1
按照数学逻辑来说,这里应该是1.5 但是在Java中输出结果为1,原因是:
两个int相除,结果仍热是int,会向下取整,即小数点之后全部舍弃掉了。
如果想要得到小数,可以使用以下方式:
double d = a*1.0 / b;
System.out.println(d);
// 或者
System.out.println((double)3 / 2);
2.5 取余
System.out.println(10 % 3);// 输出 1
// 因为:10 = 3 * 3 + 1,所以余数就是 1
取余常见的应用:
// 判断奇偶数
int num = 15;
if (num % 2 == 0){
System.out.println("偶数");
}else{
System.out.println("奇数");
}
// 判断是否能整除
if (100 % 5 == 0){
System.out.println("可以整除");
}
三、自增与自减运算符
3.1 自增(++)
int a = 10;
a++;
System.out.println(a);// 输出 11
等价于:
a = a + 1;
3.2 自减(--)
int a = 10;
a--;
System.out.println(a);// 输出 9
等价于:
a = a - 1;
四、前置++与后置++
4.1 前置++
int a = 5;
int b = ++a;
System.out.println(a);// 输出 6
System.out.println(b);// 输出 6
// 执行过程如下:
// a = a + 1
// 再赋值给 b
4.2 后置++
int a = 5;
int b = a++;
System.out.println(a);// 输出 6
System.out.println(b);// 输出 5
// 执行过程如下:
// 先把a原来的值赋值给b
// 再使a+1
总的来说就是:前置先加后用,后置先用后加
例题:
int i = 5;
int j = i++ + ++i;
/*
执行过程:
第一次:
i++ → 5
i = 6
第二次:
++i
i = 7
值为7
因此 5 + 7 = 12
最后 i = 7,j = 12
在平常开发中不要写这种代码,可读性极差。
*/
五、赋值运算符
赋值运算符最常见的就是 = 号,例如:
int age = 18;
复合赋值:
/*
+=
-=
*=
/=
%=
例如:
int a = 10;
a += 5;
就等价与:
a = a + 5;
*/
更多的例子:
a -= 3;
a *= 2;
a /= 5;
a %= 2;
注意:
short s = 1;
s += 1;
// 这个代码可以编译
但是:
short s = 1;
s = s + 1;
// 这个代码编译失败
原因:
/*
s + 1
结果提升为 int。
而:
+=
Java 自动进行了强制转换。
*/
六、关系(比较)运算符
用于比较两个值。结果一定是真或者假。
| 运算符 | 含义 |
|---|---|
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
| == | 等于 |
| != | 不等于 |
示例:
int a = 10;
int b = 20;
System.out.println(a > b); // 输出 false
System.out.println(a < b); // 输出 true
System.out.println(a == b); // 输出 false
System.out.println(a != b); // 输出 true
七、== 与 = 的区别
这两个很多初学者都容易写错。= 表示赋值,==表示判断是否相等。
例如:
int a = 10;
int b = 20;
System.out.println(a == b);// 输出 false
八、逻辑运算符
逻辑运算符用于连接多个条件。
| 运算符 | 含义 |
|---|---|
| && | 逻辑与 |
| || | 逻辑或 |
| ! | 逻辑非 |
8.1 逻辑与
int age = 20;
if(age >=18 && age <=35){
System.out.println("青年");
}
两个条件都必须成立。
8.2 逻辑或
if(score >=90 || rank <=10){
System.out.println("优秀");
}
满足其中一个条件即可。
8.3 逻辑非
boolean flag = true;
System.out.println(!flag);// 输出 false
九、短路运算
9.1 &&
当左边的表达式为 false 时,右边的不会执行。
例如:
int a = 10;
if(a > 20 && ++a > 15){
}
System.out.println(a);
// 这里会输出 10,因为左边已经是false了,所以就不会执行右边了。
9.2 ||
当左边的表达式为 true 时,右边的不会执行。
例如:
int a = 10;
if(a <20 || ++a>20){
}
System.out.println(a);
// 这里会输出 10,因为左边已经是true了,所以就不会执行右边了。
十、位运算符
位运算主要用于底层开发、网络编程、算法优化等场景。
| 运算符 | 作用 |
|---|---|
| & | 按位与 |
| | | 按位或 |
| ^ | 按位异或 |
| ~ | 按位取反 |
| << | 左移 |
| >> | 右移 |
| >>> | 无符号右移 |
示例:
10.1 按位与
System.out.println(5 & 3);
/*
二进制:
5 -> 0101
3 -> 0011
0101
0011 &
按位与的结果为:
0001
输出:1
运算规则:只要对应位有0,则当前位就是0
*/
10.2 按位或
System.out.println(5 | 3);
/*
二进制:
5 -> 0101
3 -> 0011
0101
0011 |
按位与的结果为:
0111
输出:7
运算规则:只要对应位有1,则当前位就是1
*/
10.3 按位异或
System.out.println(5 ^ 3);
/*
二进制:
5 -> 0101
3 -> 0011
0101
0011 ^
按位与的结果为:
0110
输出:6
运算规则:只要对应位不一样,则当前位就是1,即:相同为0,不同为1
*/
10.4 左移
System.out.println(11 << 1);
/*
二进制:
11 -> 0000 1011
0000 1011 << 1 表示左移一个比特位,单位是byte
向左移动,那么右边要补0,即: 0001 0110 -> 22
如果左移两位就是:0010 1100 -> 44
*/
10.5 右移
System.out.println(11 >> 1);
/*
二进制:
11 -> 0000 1011
0000 1011 >> 1 表示右移一个比特位,单位是byte
向右移动,那么左边边要补符号位,符号位为0就补0,符号位为1就补1,即: 0000 0101 -> 5
如果右移两位就是:0000 0010 -> 2
*/
十一、三元运算符
语法:
条件 ? 表达式1 : 表达式2
// 如果条件成立,就执行表达式1,否则就执行表达式2
例如:
int a = 10;
int b = 20;
int max = a > b ? a : b;
System.out.println(max);// 输出 20
多个判断:
String result = score >=60 ? "及格" : "不及格";
三元运算符可以简化简单的 if…else,但复杂逻辑仍建议使用 if…else,以保证代码可读性。
十二、运算符优先级
Java 运算符有固定的优先级。常见优先级(由高到低)如下:
| 优先级 | 运算符 |
|---|---|
| ① | () |
| ② | ++、--、! |
| ③ | *、/、% |
| ④ | +、- |
| ⑤ | <<、>>、>>> |
| ⑥ | >、<、>=、<= |
| ⑦ | ==、!= |
| ⑧ | & |
| ⑨ | ^ |
| ⑩ | | |
| ⑪ | && |
| ⑫ | || |
| ⑬ | ?: |
| ⑭ | =、+=、-= 等 |
💡建议:与其死记优先级,不如适当使用括号 (),既能避免歧义,也能提升代码可读性。
更多推荐


所有评论(0)