运算符

一、运算符的分类

1. 按功能分类

分类 包含运算符
算术运算符(7 个) +-*/%++--
赋值运算符(12 个) =+=-=*=/=%=>>=<<=>>>=&=|=^=
比较(关系)运算符(6 个) >>=<<===!=
逻辑运算符(6 个) &|^!&&|
位运算符(7 个) &|^~<<>>>>>
条件运算符(1 个) (条件表达式)?结果1:结果2
Lambda 运算符(1 个) ->(暂不讲解)

2. 按操作数个数分类

分类 说明
一元运算符(单目) 操作数为 1 个,如:正号(+)、负号(-)、++--!~
二元运算符(双目) 操作数为 2 个,除一元和三元运算符外均为此类
三元运算符(三目) 操作数为 3 个,仅(条件表达式)?结果1:结果2

二、算术运算符

1. 基本用法

Pasted image 20250805180655.png

2. 关键注意点

  • + 两侧至少有一个字符串时,功能为拼接(结果为字符串),否则为加法。
  • 整数除法(如int间除法)仅保留整数部分,无四舍五入。
  • ++/-- 单独使用时,前 / 后操作结果一致;与其他操作结合时,前操作先变更值再运算,后操作先运算再变更值。

3. 案例

// 取余与除法示例
int num = 187;
int bai = num / 100; // 百位:1(187/100=1)
int shi = num % 100 / 10; // 十位:8(187%100=87,87/10=8)
int ge = num % 10; // 个位:7

// 自增示例
int x = 3;
int y = x++; // y=3,x=4(后++:先赋值再自增)
int z = ++x; // z=5,x=5(前++:先自增再赋值)

三、赋值运算符

1. 基本用法

运算符 功能说明 示例
= 基本赋值(支持连续赋值) int a = 10; int b = a; int c = d = 20;
+= 左值 = 左值 + 右值(自动类型转换) int m = 10; m += 5; // m=15short s=3; s+=2; // 等价于s=(short)(s+2)
-= 左值 = 左值 – 右值(自动类型转换) int n=5; n-=3; // n=2
*= 左值 = 左值 × 右值(自动类型转换) int p=4; p*=2; // p=8
/= 左值 = 左值 ÷ 右值(自动类型转换) int q=10; q/=3; // q=3
%= 左值 = 左值 % 右值(自动类型转换) int r=7; r%=3; // r=1

2. 关键注意点

  • 扩展赋值运算符(+=等)会自动进行强制类型转换,避免编译报错(如short类型运算)。
  • 连续赋值需保证变量已声明(如int a,b; a = b = 10;合法)。

四、比较(关系)运算符

1. 基本用法

Pasted image 20250805180453.png

2. 关键注意点

  • 结果只能是truefalse
  • 不可将==误写为==是赋值,返回值为右值)。
  • 引用类型比较(如String)需注意:==比较地址,equals()方法比较内容(后续讲解)。

3. 示例

int a = 10, b = 20;
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a > b);  // false

boolean c = true, d = false;
System.out.println(c == d); // false

五、逻辑运算符(操作数为 boolean 类型)

1. 基本用法

运算符 功能说明 特点
& 逻辑与(全 true 则 true,否则 false) 非短路:两边都执行
&& 短路与(全 true 则 true,否则 false) 短路:左边为 false 时,右边不执行
| 逻辑或(全 false 则 false,否则 true) 非短路:两边都执行
| 短路或(全 false 则 false,否则 true) 短路:左边为 true 时,右边不执行
^ 逻辑异或(两边不同则 true,相同则 false)
! 逻辑非(true 变 false,false 变 true) 一元运算符

2. 示例

int x = 10;
// 短路与:左边为false,右边x++不执行
System.out.println(3 > 5 && x++ > 0); // false
System.out.println(x); // 10(x未自增)

// 非短路与:两边都执行
System.out.println(3 > 5 & x++ > 0); // false
System.out.println(x); // 11(x自增)

// 逻辑异或
System.out.println(true ^ false); // true
System.out.println(true ^ true);  // false

六、位运算符(操作数为整数,按二进制位运算)

1. 基本用法

运算符 功能说明 示例(以 byte 类型为例)
& 按位与(对应位均为 1 则为 1,否则 0) 6 & 3 = 2(00000110 & 00000011 = 00000010)
| 按位或(对应位有 1 则为 1,否则 0) 6 | 3 = 7(00000110 | 00000011 = 00000111)
^ 按位异或(对应位不同则为 1,相同则 0) 6 ^ 3 = 5(00000110 ^ 00000011 = 00000101)
~ 按位取反(0 变 1,1 变 0) ~6 = -7(~00000110 = 11111001,补码对应 – 7)
<< 左移(左移 n 位 = 原值 ×2ⁿ,低位补 0) 3 << 2 = 12(00000011 << 2 = 00001100)
>> 右移(右移 n 位 = 原值 ÷2ⁿ,高位补符号位) 6 >> 2 = 1(00000110 >> 2 = 00000001)
>>> 无符号右移(右移 n 位,高位补 0,仅适用于正数) 6 >>> 2 = 1(同右移,负数结果不同)

七、条件运算符(三元运算符)

1. 语法格式

(条件表达式) ? 结果1 : 结果2;
  • 执行逻辑:若条件表达式为true,结果为结果1;否则为结果2
  • 结果 1 和结果 2 需为同一类型或兼容类型。

2. 示例

int a = 10, b = 20;
int max = (a > b) ? a : b; // max=20(a<b,取b)
String res = (a == b) ? "相等" : "不等"; // res="不等"

八、运算符优先级

运算符有不同的优先级,所谓优先级就是在表达式运算中的运算符顺序。

上一行中的运算符总是优先于下一行的。

优先级 运算符说明 Java运算符
1 括号 ()[]{}
2 正负号 +-
3 单元运算符 ++--~
4 乘法、除法、求余 */%
5 加法、减法 +-
6 移位运算符 <<>>>>>
7 关系运算符 <<=>=>instanceof
8 等价运算符 ==!=
9 按位与 &
10 按位异或 ^
11 按位或 |
12 条件与 &&
13 条件或 |
14 三元运算符 ? :
15 赋值运算符 =+=-=*=/=%=
16 位赋值运算符 &=|=<<=>>=>>>=

开发建议:

  1. 不要过多的依赖运算的优先级来控制表达式的执行顺序,这样可读性太差,尽量使用()来控制表达式的执行顺序。

  2. 不要把一个表达式写得过于复杂,如果一个表达式过于复杂,则把它分成几步来完成。例如: ​ (num1 + num2) * 2 > num3 && num2 > num3 ? num3 : num1 + num2;

Java基础

类型转换

2025-8-4 21:29:51

Java基础

代码注释

2025-8-5 18:30:03

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索