1. 运算符的本质与分类
运算符是编程语言中最基础的构建模块之一,它们就像数学中的加减乘除符号,但功能更为丰富。在Java、C、PHP等主流语言中,运算符主要分为以下几类:
- 算术运算符:+、-、*、/、%(取模)
- 关系运算符:>、<、==、!=、>=、<=
- 逻辑运算符:&&(与)、||(或)、!(非)
- 位运算符:&、|、^(异或)、~(取反)、<<、>>
- 赋值运算符:=、+=、-=、*=、/=
- 其他运算符:三元运算符(?:)、instanceof(类型判断)等
每种运算符都有其特定的使用场景和运算规则。比如取模运算符%,在判断奇偶性、循环队列实现等场景中非常实用:
java复制int num = 10;
if(num % 2 == 0) {
System.out.println("偶数"); // 会输出"偶数"
}
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 运算符优先级深度解析
运算符优先级决定了表达式中运算的执行顺序,就像数学中的"先乘除后加减"规则。不同语言的优先级规则略有差异,但大体相似。以下是一个典型的优先级顺序(从高到低):
- 括号 ()
- 单目运算符:++、--、!、~
- 乘除取模:*、/、%
- 加减:+、-
- 移位:<<、>>、>>>
- 关系:<、<=、>、>=
- 相等:==、!=
- 位与:&
- 位异或:^
- 位或:|
- 逻辑与:&&
- 逻辑或:||
- 三元:?:
- 赋值:=、+=、-=等
一个常见的陷阱是逻辑运算符的优先级。例如:
java复制boolean result = true || false && false;
// 等价于 true || (false && false),结果为true
// 因为&&优先级高于||
提示:当不确定优先级时,使用括号明确运算顺序是最安全的做法。
3. 逻辑运算符的短路特性
逻辑运算符&&和||具有短路特性,这是实际开发中非常有用的行为:
- &&短路:当左侧为false时,右侧不会执行
- ||短路:当左侧为true时,右侧不会执行
这种特性常被用于条件判断和资源访问:
java复制if(list != null && list.size() > 0) {
// 安全访问list
}
// 如果list为null,list.size()不会执行,避免了NullPointerException
在PHP中,逻辑运算符的行为类似:
php复制if($conn || connectToDatabase()) {
// 如果$conn为真,不会调用connectToDatabase()
}
4. 运算符重载实践(C++示例)
运算符重载是C++的特色功能,允许为自定义类型定义运算符行为。以完善分数类的算术运算为例:
cpp复制class Fraction {
private:
int numerator;
int denominator;
public:
Fraction(int n, int d) : numerator(n), denominator(d) {}
// 重载+运算符
Fraction operator+(const Fraction& other) {
int n = numerator * other.denominator + other.numerator * denominator;
