当前位置: 首页 > news >正文

JAVA运算符详解

一、运算符分类概览

Java运算符分为7大类:

  1. 算术运算符+ - * / % ++ --
  2. 关系运算符== != > < >= <=
  3. 逻辑运算符&& || ! & | ^
  4. 位运算符& | ^ ~ << >> >>>
  5. 赋值运算符= += -= *= /= %=
  6. 条件运算符? :
  7. 其他运算符instanceof、箭头运算符->(Lambda)

二、算术运算符详解

1. 基础四则运算
public class BasicMath {public static void main(String[] args) {int a = 10;int b = 3;System.out.println(a + b);  // 13(加法)System.out.println(a - b);  // 7(减法)System.out.println(a * b);  // 30(乘法)System.out.println(a / b);  // 3(整数除法,舍去小数)System.out.println(a % b);  // 1(取余)// 浮点数运算double x = 5.0;double y = 2.0;System.out.println(x / y);  // 2.5(精确除法)}
}

重要特性

  • 整数除法会丢弃小数部分
  • %取余结果符号与被除数相同(-10%3 = -1
  • +可连接字符串:"Hello" + 123 → "Hello123"
2. 自增自减运算符
public class IncrementDemo {public static void main(String[] args) {int num = 5;// 前自增:先加1再使用System.out.println(++num);  // 6// 后自增:先使用再加1System.out.println(num++);  // 6(此时num=7)int a = 10;int b = a++ + ++a;  // 10 + 12 = 22System.out.println(b); }
}

易错点

  • 避免在复杂表达式中混合使用(如i++ + ++i
  • 单独使用时i++++i效果相同

三、关系运算符

用于比较两个值的关系,返回boolean类型结果:

public class Comparison {public static void main(String[] args) {int m = 10;int n = 20;System.out.println(m == n);  // falseSystem.out.println(m != n);  // trueSystem.out.println(m > n);   // falseSystem.out.println(m <= n);  // true// 浮点数比较陷阱double d1 = 0.1 + 0.2;double d2 = 0.3;System.out.println(d1 == d2);  // false(应判断差值是否<1e-6)}
}

四、逻辑运算符

1. 基础逻辑运算
public class LogicDemo {public static void main(String[] args) {boolean a = true;boolean b = false;System.out.println(a && b);  // false(逻辑与)System.out.println(a || b);  // true(逻辑或)System.out.println(!a);      // false(逻辑非)}
}
2. 短路特性(重要!)
public class ShortCircuit {public static void main(String[] args) {int x = 5;int y = 10;// 当第一个条件为false时,&&不再执行第二个判断if (x > 10 && y++ < 20) { // 不会执行}System.out.println(y);  // 10(y未自增)// 位运算符&会执行全部判断if (x > 10 & y++ < 20) { // 不会执行,但y仍自增}System.out.println(y);  // 11}
}

关键区别

  • &&||具有短路特性
  • &|无论结果如何都会执行全部表达式

五、位运算符(硬件级操作)

public class BitwiseOps {public static void main(String[] args) {int a = 5;    // 二进制 0101int b = 3;    // 二进制 0011System.out.println(a & b);   // 0001 → 1(按位与)System.out.println(a | b);    // 0111 → 7(按位或)System.out.println(a ^ b);   // 0110 → 6(异或:相同为0)System.out.println(~a);       // 1010 → -6(取反)// 移位运算int num = 8;  // 二进制 1000System.out.println(num << 2);  // 32(左移2位,相当于*4)System.out.println(num >> 1);  // 4(带符号右移,相当于/2)System.out.println(-8 >>> 1);  // 2147483644(无符号右移)}
}

应用场景

  • 权限系统(用位表示权限)
  • 加密算法
  • 高性能计算

六、赋值运算符

public class Assignment {public static void main(String[] args) {int x = 10;x += 5;    // 等价于 x = x + 5 → 15x *= 2;    // x = 15 * 2 → 30// 特殊案例byte b = 5;b += 10;   // 正确(自动强制转换)// b = b + 10;  // 错误!需要强制转换}
}

复合赋值特点

  • 自动强制类型转换
  • 比普通赋值更高效

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

public class InstanceofDemo {public static void main(String[] args) {String str = "Hello";System.out.println(str instanceof String);  // trueSystem.out.println(str instanceof Object); // true(所有类都是Object子类)}
}

最佳实践

  • 替代简单if-else
  • 避免多层嵌套

八、其他运算符

1. instanceof 类型判断
public class InstanceofDemo {public static void main(String[] args) {String str = "Hello";System.out.println(str instanceof String);  // trueSystem.out.println(str instanceof Object); // true(所有类都是Object子类)}
}
2. Lambda箭头运算符(Java 8+)
import java.util.function.Consumer;public class LambdaDemo {public static void main(String[] args) {Consumer<String> printer = s -> System.out.println(s);printer.accept("Hello Lambda!");}
}

九、运算符优先级表(部分)

优先级运算符
1() [] .(方法调用)
2! ~ ++ --(单目运算)
3* / %
4+ -
5<< >> >>>
6< <= > >= instanceof
7== !=
8&
9^
10`
11&&
12`
13? :
14= += -= 等赋值运算符

记忆技巧

  • 单目 > 算术 > 移位 > 关系 > 逻辑 > 条件 > 赋值
  • 不确定时使用括号明确优先级

十、综合练习

public class OperatorQuiz {public static void main(String[] args) {int a = 5, b = 3;boolean flag = (a++ > 5) && (++b < 5);System.out.println("a=" + a + ", b=" + b);  // a=6, b=3(短路特性)int x = 4, y = 8;int max = (x > y) ? x : y;System.out.println("较大值:" + max);  // 8// 位运算交换变量x = x ^ y;y = x ^ y;x = x ^ y;System.out.println("x=" + x + ", y=" + y);  // x=8, y=4}
}

十一、常见错误集锦

整数除以零:int a = 5 / 0;  // 运行时抛出ArithmeticException
浮点数相等判断:if (0.1 + 0.2 == 0.3) {  // false!应判断差值// 不会执行
}
自增运算符混淆:int i = 5;
int j = i++ + ++i;  // 5 + 7 = 12(可读性差)
位运算优先级:int result = 5 & 3 == 1;  // 错误!等价于5 & (3 ==1)

 总结:

  1. Java所有运算符的分类和使用场景
  2. 运算符的优先级和结合性
  3. 常见错误及解决方法
  4. 位运算的实际应用技巧
    http://www.xdnf.cn/news/683389.html

    相关文章:

  1. Oracle向PG转移建议以及注意点
  2. 57页 @《人工智能生命体 新启点》中國龍 原创连载
  3. IvorySQL 核心技术解读:双 Parser 架构如何定义数据库兼容性?
  4. python训练营打卡第36天
  5. 竞赛小算法总结(二):gcdlcm,拓展欧几里得线性同余,逆元(含代码详解)
  6. AE的ai图层导到Ai
  7. spring4第2课-ioc控制反转-依赖注入,是为了解决耦合问题
  8. WIN10 安装dify ollama搭建工作流agent
  9. 两种主流检索技术:BM25(基于关键词匹配)和向量相似度检索
  10. LVGL(Flex布局)
  11. Docker修改镜像存放位置
  12. qiankun 子应用怎样通过 props拿到子应用【注册之后挂载之前】主应用中发生变更的数据
  13. vue2轮播图组件
  14. 计算机网络实验课(二)——抓取网络数据包,并实现根据条件过滤抓取的以太网帧,分析帧结构
  15. 如何检查液质联用仪LCMS的真空度
  16. 提升前端性能:减少DOM操作
  17. 在线项目管理工具对比:Trello、Worktile等20款软件测评
  18. Java的Spring Cloud生态中实现SSE(Server-Sent Events)服务端实践
  19. YoloV11改进策略:卷积篇-风车卷积-即插即用
  20. 代码随想录算法训练营第60期第四十九天打卡
  21. day05-常用API(二):Lambda、方法引用详解
  22. Python装饰器与异常捕获的高级用法详解
  23. 基于 STM32 的农村污水处理控制系统设计与实现
  24. @vue/composition-api
  25. uniapp-商城-72-shop(5-商品列表,购物车实现回顾)
  26. Linux 6.15 内核发布,新功能
  27. 【免费】【无需登录/关注】坐标系批量转换与可视化网页工具
  28. 31. 自动化测试开发之实现INI配置文件解析
  29. 从CPU缓存出发对引用池进行优化
  30. C51-指针函数