当前位置: 首页 > 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. 位运算的实际应用技巧

    相关文章:

  1. 实验设计与分析(第6版,Montgomery)第3章单因子实验:方差分析3.11思考题3.4 R语言解题
  2. 如何彻底禁用WordPress中的评论
  3. 12. CSS 布局与样式技巧
  4. [ Qt ] | 常见控件(二): window相关
  5. 每天掌握一个Linux命令 - sqlite3
  6. Baklib在数字化内容管理中的关键作用是什么?
  7. JAVA SE 文件IO
  8. 笔记: 在WPF中ContentElement 和 UIElement 的主要区别
  9. MYSQL丢失pid处理方式
  10. LVGL(lv_tabview)
  11. 商品条形码查询接口如何用C#进行调用?
  12. 【Harmony OS】组件自定义属性、事件和状态管理
  13. 525全国护肤日 国际医学皮肤科助力银龄肌肤科学护肤
  14. 用ChatGPT辅助UI设计:从需求分析到风格提案的提效秘籍
  15. 16. Git从入门到实践
  16. MySQL问题:什么是MySQL的中的最左匹配原则?
  17. 钠离子电池循环寿命突破万次
  18. ZAB 和 RAFT分别是什么?它们的区别是什么?
  19. 振动分析 - 速度谱与加速度谱的转换
  20. 08SpringBoot高级--自动化配置
  21. 学网站开发好找工作吗/免费模式营销案例
  22. 万网登录/云南网站建设快速优化
  23. 免费空间建站网站推荐/白度指数
  24. 合肥瑶海区教育局官网/大地seo
  25. 做网站凡科如何/南宁优化网站收费
  26. 加强政府门户网站建设与管理/武汉seo招聘信息