二、Java运算符的分类与详解
2.1 算术运算符:基础计算的核心
算术运算符用于对数值类型(整数、浮点数等)进行加减乘除、取余等基本数学运算,是最常用的运算符之一。
- 加法(+):用于两个数相加,也可用于字符串拼接。
int a = 5, b = 3; int sum = a + b; // sum = 8 String str = Hello + World; // str = HelloWorld
- 减法(-):两数相减。
int diff = b - a; // diff = -2
- 乘法(*):两数相乘。
int product = a * b; // product = 15
- 除法(/):两数相除,需注意整数除法与浮点数除法的区别:
- 整数除法(操作数均为int):只保留整数部分,如
7 / 3 = 2
- 浮点数除法(至少一个操作数为double/float):结果为浮点数,如
7.0 / 3 = 2.333...
- 整数除法(操作数均为int):只保留整数部分,如
- 取余(%):计算两数相除的余数(仅用于整数),如
7 % 3 = 1
- 自增(++)与自减(--):变量自身加1或减1,分前置(先运算后使用)和后置(先使用后运算)两种:
int x = 2, y; y = ++x; // 前置++:x先自增为3,y=3 y = x++; // 后置++:y=3(此时x=3),x再自增为4
2.2 赋值运算符:数据存储的桥梁
赋值运算符用于将右侧值赋给左侧变量,基本格式为 变量 = 表达式
。Java中还提供了复合赋值运算符,简化代码书写。
- 基本赋值(=):将右侧值直接赋给左侧变量。
int num = 10; // 将10赋给num
- 复合赋值(+=、-=、*=、/=、%=):将左侧变量与右侧值进行运算后,结果赋给左侧变量。
num += 5; // 等价于 num = num + 5 → num = 15 num *= 2; // 等价于 num = num * 2 → num = 30
- 注意:复合赋值运算符会自动进行类型转换,例如
byte b = 3; b += 5;
是合法的(等价于b = (byte)(b + 5)
),而b = b + 5;
则会因5是int类型导致编译错误(byte与int运算结果为int,无法直接赋给byte)。
2.3 比较运算符:判断大小的工具
比较运算符用于比较两个值的大小或关系,返回布尔值(true/false),常用于条件判断(如if语句)。
- 等于(==):判断两个值是否相等(基本类型比较值,引用类型比较地址)。
int a = 5, b = 5; boolean isEqual = (a == b); // true String s1 = new String(Java), s2 = new String(Java); boolean isEqualObj = (s1 == s2); // false(地址不同),需用s1.equals(s2)比较内容
- 不等于(!=):判断两个值是否不相等,与==相反。
- 大于(>)、小于(<)、大于等于(>=)、小于等于(<=):用于比较数值大小,只能用于数值类型(int、double等)。
boolean isGreater = (10 > 5); // true
2.4 逻辑运算符:组合条件的逻辑判断
逻辑运算符用于组合多个布尔表达式,返回最终的布尔结果,是实现复杂条件判断的核心。
- 逻辑与(&&)与逻辑或(||):
&&
:短路与,只有两边表达式均为true时结果才为true;若左侧为false,右侧不再执行(效率更高)。int x = 10; boolean result = (x > 5) && (x / 0 > 0); // 左侧true,右侧虽有除0错误,但因短路不执行,结果为true
||
:短路或,只要有一边表达式为true,结果就为true;若左侧为true,右侧不再执行。boolean result = (x > 20) || (x / 0 > 0); // 左侧false,右侧除0不执行,结果为false
- 逻辑非(!):取反操作,true变false,false变true。
boolean flag = true; boolean notFlag = !flag; // notFlag = false
- 注意:逻辑运算符仅操作布尔值,而位运算符(&、|)可操作整数类型,需区分使用。
2.5 位运算符:二进制层面的操作
位运算符直接对整数的二进制位进行操作,适用于底层开发(如权限控制、高效计算),理解难度稍高但功能强大。
- 按位与(&):两个二进制数对应位均为1时结果为1,否则为0。
int a = 5 (二进制101), b = 3 (二进制011); a & b = 1 (二进制001)
- 按位或(|):两个二进制数对应位有一个为1时结果为1,否则为0。
a | b = 7 (二进制111)
- 按位异或(^):两个二进制数对应位不同时结果为1,相同时为0。常用于数据加密、交换两个变量值(无需临时变量)。
a ^ b = 6 (二进制110); // 5^3=6
- 按位取反(~):将二进制数的每一位取反(0变1,1变0),结果为补码形式(Java中int为32位,正数取反后为负数,如~5 = -6)。
- 左移(<<)与右移(>>):
<<
:左移n位,右侧补n个0,等价于乘以2n。如5 << 1 = 10 (101 << 1 = 1010)
>>
:右移n位,左侧补符号位(正数补0,负数补1),等价于除以2n(向下取整)。如10 >> 1 = 5 (1010 >> 1 = 101)
>>>
:无符号右移,左侧补0(无论正负),结果恒为非负数。如-10 >>> 1 = 2147483643
2.6 条件运算符(三目运算符):简洁的条件判断
条件运算符(?:)是Java中唯一的三元运算符,语法为 条件表达式 ? 表达式1 : 表达式2
,当条件为true时返回表达式1,否则返回表达式2。
int score = 85; String result = score >= 60 ? 及格 : 不及格; // result = 及格
适用于简单的二选一逻辑,避免冗长的if-else代码(但复杂逻辑仍需使用if-else)。