800 字
2 分钟
Java运算符与表达式详解
++i和i++的区别是多少Java新手的噩梦?我当年面试的时候就被问倒过。还有位运算,虽然平时用得少,但在权限系统和性能优化场景下简直是神器。这篇文章把Java的运算符和表达式系统地梳理了一遍。
Java运算符与表达式详解
运算符
运算符就是告诉编译器执行特定数学或逻辑操作的符号。Java的运算符很丰富,但有些细节不注意就会踩坑。
1. 算术运算符
| 运算符 | 描述 | 示例 |
|---|---|---|
| + | 加法 | a + b |
| - | 减法 | a - b |
| * | 乘法 | a * b |
| / | 除法 | a / b |
| % | 取模(余数) | a % b |
| ++ | 自增 | a++ 或 ++a |
| — | 自减 | a-- 或 --a |
注意:整数除法会直接截断小数部分,比如 5 / 2 结果是 2 不是 2.5。自增自减的前缀和后缀——前缀是先加后用,后缀是先用后加。
2. 关系运算符
| 运算符 | 描述 | 示例 |
|---|---|---|
| == | 等于 | a == b |
| != | 不等于 | a != b |
| > | 大于 | a > b |
| < | 小于 | a < b |
| >= | 大于等于 | a >= b |
| <= | 小于等于 | a <= b |
3. 逻辑运算符
| 运算符 | 描述 | 短路特性 |
|---|---|---|
| && | 逻辑与 | 短路 |
| || | 逻辑或 | 短路 |
| ! | 逻辑非 | 无 |
短路特性很实用——&&左边为false就不算右边了,||左边为true也不算右边了。可以用来做空指针保护,比如 if (obj != null && obj.getValue() > 0)。
4. 位运算符
| 运算符 | 描述 | 示例 |
|---|---|---|
| & | 按位与 | a & b |
| | | 按位或 | a | b |
| ^ | 按位异或 | a ^ b |
| ~ | 按位取反 | ~a |
| << | 左移 | a << b |
| >> | 右移 | a >> b |
| >>> | 无符号右移 | a >>> b |
位运算平时用得不多,但做权限系统时用按位与或非常方便——用一个int就能表示多个权限的组合。
5. 赋值运算符
=、+=、-=、*=、/=、%= 等,就是简写,比如 a += b 等价于 a = a + b。
6. 三元运算符
result = condition ? expression1 : expression2;简洁好用,但别嵌套使用,否则可读性很差。
运算符优先级
从高到低:括号 > 一元 > 乘除 > 加减 > 移位 > 关系 > 位运算 > 逻辑运算 > 三元 > 赋值。
记不住就加括号,括号永远不会错,而且让代码更清晰。
常见陷阱
- 混淆==和=——
if (a = b)语法上是对的,但意思完全不对。这个错误太经典了,编译器还不报错,因为语法没问题。 - 整数溢出——计算结果超出类型范围,比如
int最大值加1变成负数。 - 浮点数精度——
0.1 + 0.2 != 0.3,需要精确计算用BigDecimal。 - 字符串比较用
==——==比较的是引用,字符串内容比较要用equals()。
💡 实战贴士: 用
==比较Integer时要注意,-128 到 127 之间的整数会缓存,超出这个范围即使值相同,==也会返回 false。所以包装类型的比较永远用equals()。
最佳实践
- 复杂表达式加括号——提高可读性
- 三元运算符别嵌套——超过一层就用if-else
- 注意整数除法——需要小数结果就用浮点数
- 利用短路特性——可以省掉不必要的条件判断
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时
相关文章 智能推荐
1
Java正则表达式详解
Java 正则表达式学的时候觉得像天书,用多了才发现它是一把锋利的瑞士军刀。校验手机号、提取日志关键信息,一行正则能顶几十行if-else。
2
Java数组与集合详解
Java 从数组到集合框架,这是每个Java开发者都会经历的进阶之路。ArrayList和HashMap用起来确实方便,但搞懂底层实现才是面试不翻车的关键。
3
Java基础入门:变量与数据类型详解
Java 变量和数据类型是Java入门的第一个坎,当年搞混int和Integer的时候debug了一下午。这篇文章把基本类型和引用类型的区别掰开揉碎了讲清楚。
4
Java序列化与反序列化详解
Java serialVersionUID不写会怎样?transient关键字有什么用?序列化这些看似简单的细节,搞不好就是线上事故的导火索。
5
Java NIO详解
Java NIO的Selector模型让我第一次感受到了单线程处理万级连接的魅力。相比传统IO的阻塞读写,Channel加Buffer的组合简直是为高性能网络编程量身定做。






