1. 概述
操作符是任何编程语言的基础构建块。我们使用操作符对值和变量执行运算。
Java提供了多种操作符,按功能可分为不同类别。本文将系统介绍所有Java操作符,助你掌握其用法和特性。
2. 算术操作符
算术操作符用于基础数学运算。注意:仅适用于基本数字类型及其包装类(如int
和Integer
)。
2.1. 加法操作符
加法操作符(+)执行数值相加或字符串拼接:
int ten = 5 + 5; // 十等于5加5
String youAndMe = "You " + "and" + " Me"; // 字符串拼接
2.2. 减法操作符
减法操作符(-)执行数值相减:
int five = 10 - 5; // 五等于10减5
int negative80 = 20 - 100; // 负80等于20减100
2.3. 乘法操作符
乘法操作符(*)执行数值相乘:
int hundred = 20 * 5; // 百等于20乘5
int fifteen = -5 * -3; // 负负得正
2.4. 除法操作符
除法操作符(/)执行数值相除:
int four = 20 / 5; // 四等于20除5
int seven = 15 / 2; // 整数除法结果为7(舍去余数)
踩坑提示:整数类型(
byte
/short
/int
/long
)相除时,结果只保留商,余数直接丢弃。如15/2
商为7余1,结果就是7。
2.5. 取模操作符
取模操作符(%)获取除法余数:
int one = 15 % 2; // 余数为1
int zero = 10 % 5; // 余数为0
3. 一元操作符
一元操作符只需单个操作数,常用于变量自增、自减或取反。
3.1. 一元加操作符
一元加操作符(+)表示正数,通常可省略:
int five = +5; // 等价于 int five = 5
3.2. 一元减操作符
一元减操作符(-)对数值或表达式取反:
int negativeFive = -5; // 负五
int eighty = -(20 - 100); // 表达式取反
3.3. 逻辑非操作符
逻辑非操作符(!)反转布尔值:
boolean aTrue = true;
boolean bFalse = !aTrue; // 变为false
3.4. 自增操作符
自增操作符(++)将变量值加1:
int number = 5;
number++; // number变为6
3.5. 自减操作符
自减操作符(--)将变量值减1:
int number = 5;
number--; // number变为4
注意:自增/自减操作符只能用于变量。
a++
合法,但5++
会编译失败。
4. 关系操作符
关系操作符(也称比较操作符)用于比较两个值或变量。
4.1. 等于操作符
等于操作符(==)比较两侧值是否相等:
int number1 = 5;
int number2 = 5;
boolean theyAreEqual = number1 == number2; // true
关键区别:比较对象时,需谨慎选择
==
和equals()
方法(如比较Long
或String
时)。
4.2. 不等于操作符
不等于操作符(!=)判断两侧值是否不等:
int number1 = 5;
int number2 = 7;
boolean notEqual = number1 != number2; // true
4.3. 大于操作符
大于操作符(>)判断左侧值是否大于右侧:
int number1 = 7;
int number2 = 5;
boolean greater = number1 > number2; // true
4.4. 大于等于操作符
大于等于操作符(>=)判断左侧值是否大于或等于右侧:
int number1 = 7;
int number2 = 5;
boolean greaterThanOrEqualTo = number1 >= number2; // true
number1 = 5;
greaterThanOrEqualTo = number1 >= number2; // 仍为true
4.5. 小于操作符
小于操作符(<)判断左侧值是否小于右侧:
int number1 = 4;
int number2 = 5;
boolean lessThan = number1 < number2; // true
4.6. 小于等于操作符
小于等于操作符(<=)判断左侧值是否小于或等于右侧:
int number1 = 4;
int number2 = 5;
boolean lessThanOrEqualTo = number1 <= number2; // true
number1 = 5;
lessThanOrEqualTo = number1 <= number2; // 仍为true
5. 逻辑操作符
Java提供两种逻辑操作符:**逻辑与(&&)和逻辑或(||)**,功能类似数字电路中的与门/或门。
5.1. 逻辑与操作符
逻辑与(&&)仅在两侧操作数均为true
时返回true
:
int number1 = 7;
int number2 = 5;
boolean resultTrue = (number1 > 0) && (number1 > number2); // true
5.2. 逻辑或操作符
逻辑或(||)在任一操作数为true
时返回true
:
int number1 = 7;
int number2 = 5;
boolean resultTrue = (number1 > 100) || (number1 > number2); // true
短路特性:逻辑或操作符具有短路效应——一旦某个操作数为
true
,立即返回结果,不再评估后续操作数。
6. 三元操作符
三元操作符是if-then-else
的紧凑形式,因有三个操作数得名。
标准if-else
语法:
if ( condition ) {
expression1
} else {
expression2
}
三元操作符语法:
condition ? expression1 : expression2
示例:
int number = 100;
String greaterThan50 = number > 50 ? "The number is greater than 50" : "The number is NOT greater than 50";
7. 位操作符和位移操作符
位操作符和位移操作符的详细内容可参考Java位操作符详解,此处简要概述。
7.1. 按位与操作符
按位与(&)对输入值逐位执行与运算:
int number1 = 12;
int number2 = 14;
int twelve = number1 & number2; // 00001100 & 00001110 = 00001100 = 12
7.2. 按位或操作符
按位或(|)对输入值逐位执行或运算:
int number1 = 12;
int number2 = 14;
int fourteen = number1 | number2; // 00001100 | 00001110 = 00001110 = 14
7.3. 按位异或操作符
按位异或(^)对输入值逐位执行异或运算:
int number1 = 12;
int number2 = 14;
int two = number1 ^ number2; // 00001100 ^ 00001110 = 00000010 = 2
7.4. 按位取反操作符
按位取反(~)是单目操作符,反转所有位:
int number = 12;
int negative13 = ~number; // ~00001100 = 11110011 = -13
7.5. 左移操作符
左移操作符(<<)将位向左移动指定次数,右侧补0:
int fourtyeight = 12 << 2; // 00001100 << 2 = 00110000 = 48
等效计算:
n << x
等价于n * 2^x
。
7.6. 带符号右移操作符
带符号右移操作符(>>)将位向右移动指定次数,左侧按符号位填充:
int three = 12 >> 2; // 00001100 >> 2 = 00000011 = 3
int negativeThree = -12 >> 2; // 11110100 >> 2 = 11111101 = -3
等效计算:
n >> x
等价于n / 2^x
。
7.7. 无符号右移操作符
无符号右移操作符(>>>)与>>
类似,但左侧始终补0:
int three = 12 >>> 2; // 00001100 >> 2 = 00000011 = 3
int result = -12 >>> 2; // 结果为1073741821 (11111111111111111111111111110100 >>> 2 = 00111111111111111111111111111101)
关键区别:无论正负数,
>>>
左侧都补0。
8. instanceof操作符
instanceof
操作符用于检查对象是否为特定类型:
boolean resultTrue = Long.valueOf(20) instanceof Number; // true
9. 赋值操作符
赋值操作符用于为变量赋值。
9.1. 简单赋值操作符
简单赋值操作符(=)将右侧值赋给左侧变量:
int seven = 7;
9.2. 复合赋值操作符
算术操作符可与赋值操作符组合,形成复合赋值:
// 假设所有变量初始值为10
a += 4; // a = 14,等价于 a = a + 4
b -= 4; // b = 6,等价于 b = b - 4
c *= 4; // c = 40,等价于 c = c * 4
d /= 4; // d = 2,等价于 d = d / 4
e %= 4; // e = 2,等价于 e = e % 4
10. 总结
Java提供了丰富的操作符体系,涵盖算术、关系、逻辑、位运算等多种功能。掌握这些操作符是编写高效Java代码的基础。