摘要本文系统讲解Java运算符的核心知识涵盖算术、赋值、关系、逻辑、位运算符五大类别详细解析自增自减的前后置区别、逻辑运算符的短路特性、运算符优先级等关键概念并通过综合代码示例演示实际应用帮助初学者快速掌握Java数据处理的基础工具为后续学习if/switch等流程控制语句打下坚实基础。关键词Java运算符, 算术运算符, 逻辑运算符, 运算符优先级, 短路特性前面两篇我们聊了变量和常量——它们是数据的“容器”。但程序如果只是静静地存放数据那跟一个数据库没什么区别。程序真正的魅力在于处理数据把两个数字加起来、判断一个数是否大于另一个、把几个条件组合起来做决策……这些“处理动作”靠的就是今天的主角——运算符Operator。运算符就像是数学里的加减乘除符号但在编程里它的家族要庞大得多。今天我会带你认识 Java 中最常用的几类运算符并告诉你什么时候用、怎么用。别担心它们都很直观你很快就能上手。1. 算术运算符算术运算符就是我们从小熟悉的加减乘除外加取余求模和自增自减。运算符含义示例结果加法5 38-减法5 - 32*乘法5 * 315/除法5 / 31整数除法向下取整%取余模5 % 325 除以 3 的余数自增i或i自身加 1--自减i--或--i自身减 1最需要注意的就是除法如果两个操作数都是整数结果也是整数小数部分会被直接截掉不是四舍五入。如果想得到小数结果至少要把其中一个操作数变成浮点数。inta7;intb2;System.out.println(a/b);// 输出 3不是 3.5System.out.println(a/2.0);// 输出 3.5因为 2.0 是 double取余运算%很实用比如判断一个数是奇数还是偶数num % 2 0就是偶数。自增自减的前置与后置区别和--既可以放在变量前面前置也可以放在后面后置它们对变量的最终效果是一样的都加 1 或减 1但表达式的返回值不同前置i先自增再返回值。后置i先返回值再自增。看个例子就明白了inti5;intji;// i 先变成 6再把 6 赋给 j所以 i6, j6intx5;intyx;// 先把 5 赋给 y然后 x 变成 6所以 x6, y5初学时容易搞混我的建议是在独立的语句中使用自增自减比如单独写一行i;不要把它和赋值混在一起这样最安全。2. 赋值运算符最基本的赋值运算符就是等号它的作用是把右边的值赋给左边的变量。intage25;// 把 25 赋给 ageJava 还提供了一系列复合赋值运算符把算术运算和赋值合并在一起让代码更简洁运算符示例等价于a 5a a 5-a - 5a a - 5*a * 5a a * 5/a / 5a a / 5%a % 5a a % 5这些运算符不仅写起来短而且执行效率通常也略高一点点因为只计算一次左侧的地址。习惯使用它们能让代码更专业。inttotal100;total20;// total 变成 120total*2;// total 变成 240System.out.println(total);// 2403. 关系运算符关系运算符用来比较两个值结果是一个布尔值true或false。它们在条件判断如 if 语句中非常关键。运算符含义示例结果等于5 3false!不等于5 ! 3true大于5 3true小于5 3false大于等于5 3true小于等于5 3false⚠️ 特别注意是比较相等而是赋值。初学者经常把if (age 18)写错——这会把 18 赋给 age而不是比较而且编译器会报错因为类型不匹配。养成习惯比较时用。对于引用类型比如String比较的是内存地址而不是内容。要比较字符串的内容是否相等应该用equals()方法。我们以后会细说。4. 逻辑运算符逻辑运算符用来连接多个布尔表达式得到最终的布尔结果。它们主要用在复杂的条件判断中。运算符含义示例说明逻辑与ANDa 5 b 10两边都为真结果才为真逻辑或OR!逻辑非NOT!(a 5)将布尔值取反短路特性重要和||具有短路求值的特性对于如果左边已经是false右边就不再计算了因为整个表达式不可能为真了。对于||如果左边已经是true右边就不再计算了因为整个表达式已经为真了。这个特性不仅可以提高性能还常常被用来做“安全判断”。例如if(name!nullname.length()0){// 只有当 name 不为 null 时才会去调用 name.length()// 如果没有短路当 name 为 null 时调用 length() 会抛出 NullPointerException}如果你去掉左边的判断程序就可能崩溃。所以短路特性非常实用。逻辑运算符的优先级!||。如果不确定就用括号把条件分组既清晰又安全。booleanresult(a5)(b10)||(c0);// 加上括号明确优先级建议总是这样写booleanresult2((a5)(b10))||(c0);5. 位运算符位运算符操作的是整数在二进制层面上的位bit。它们在实际开发中不如前面几种常用但在一些场景比如权限控制、高效计算、网络协议解析中很关键。初学阶段了解即可不必深究。运算符含义示例二进制按位与5 3 10101 0011 0001按位或^按位异或5 ^ 3 60101 ^ 0011 0110~按位取反~5 -6补码运算不深入左移5 1 10相当于乘以 2右移5 1 2相当于除以 2 取整无符号右移忽略符号位右移正数同如果你现在看不懂这些完全没关系。位运算符不是必须马上掌握的我们会在以后的实际应用中比如权限组合再具体介绍。你只需要知道 Java 有这个能力就行。6. 运算符优先级当多个运算符混在一起时需要确定计算顺序。Java 有明确的优先级规则但不必死记硬背因为最稳妥的做法是使用小括号()来明确顺序。不过有一个大致的优先级印象还是有帮助的从高到低()括号、--前缀、!、~、正号、-负号*、/、%、-加减、、、、、、!^|||?:三元运算符我们下一篇会学赋值运算符、等最佳实践不要依赖优先级多用括号。括号不仅让计算顺序明确也让代码更易读。// 不清晰intresultab*c-d/e;// 清晰明了intresulta(b*c)-(d/e);7. 综合示例写一个小程序演示我们学到的运算符packagecom.example.demo;/** * 演示各类运算符的用法 */publicclassOperatorDemo{publicstaticvoidmain(String[]args){// ---- 1. 算术运算 ----inta10,b3;System.out.println(a b (ab));// 13System.out.println(a - b (a-b));// 7System.out.println(a * b (a*b));// 30System.out.println(a / b (a/b));// 3整数除法截断System.out.println(a % b (a%b));// 110除以3余1// ---- 2. 自增自减 ----intcount0;count;// count 变成 1count;// count 变成 2System.out.println(count count);// 2// 前置和后置的返回值区别intx5;intyx;// y 5, x 6System.out.println(x x, y y);// x6, y5intp5;intqp;// p 6, q 6System.out.println(p p, q q);// p6, q6// ---- 3. 复合赋值 ----inttotal100;total50;// total 150total*2;// total 300total%7;// 300 % 7 6 (7*42294, 余6)System.out.println(total total);// 6// ---- 4. 关系运算 ----booleanisEqual(ab);// falsebooleanisGreater(ab);// trueSystem.out.println(isEqual isEqual);System.out.println(isGreater isGreater);// ---- 5. 逻辑运算 ----intage20;booleanisAdultage18;booleanhasTickettrue;booleancanEnterisAdulthasTicket;// true true trueSystem.out.println(可以进入canEnter);// 短路示例Stringnamenull;// 下面的表达式不会抛出空指针因为左边为 false右边不会执行if(name!nullname.length()0){System.out.println(名字长度name.length());}else{System.out.println(名字为空或null);}// ---- 6. 位运算简单示例了解即可 ----intflags5;// 二进制 0101intmask3;// 二进制 0011intresultflagsmask;// 0001 1System.out.println(flags mask result);}}8. 常见陷阱与注意事项整数除法截断别指望7 / 2给你 3.5它会给你 3。如果需要小数记得把其中一个数转成浮点数例如7 / 2.0。比较浮点数因为浮点数精度问题不要直接用比较两个浮点数是否相等。应该判断它们的差的绝对值是否小于一个很小阈值比如0.000001。短路逻辑巧妙利用短路可以避免一些异常但也要注意如果右边的表达式有副作用比如改变变量值短路会导致它不执行这可能会埋下 bug。与equals对基本类型用对字符串等引用类型用equals()比较内容。我们会专门在字符串那一篇详细讲。今天的总结今天我们学习了 Java 中的五大类运算符算术运算符、-、*、/、%、、--赋值运算符以及复合赋值、-等关系运算符、!、、、、逻辑运算符、||、!注意短路特性位运算符入门了解、|、^、~、、进阶再深入你还知道了运算符优先级的概念以及用括号提高可读性的习惯。这些运算符就像是你的工具箱里的扳手、螺丝刀——单独看都很简单但组合起来就能完成复杂的任务。下一篇文章我们会用这些运算符搭建程序逻辑的第一个真正“决策”工具if 和 switch。动手试试写一段代码计算一个三位数比如 456的个位、十位、百位数字分别用变量表示并打印出来。提示用/和%运算符。写一个判断闰年的表达式年份能被 4 整除但不能被 100 整除或者能被 400 整除。把表达式写出来然后用几个年份如 2024、2100、2000验证一下。试试把double类型的两个小数如 0.1 和 0.2相加打印结果观察是不是精确的 0.3如果不是想想为什么。我们下一篇见。 获取本系列示例代码请访问 GitCode。
9. 【Java】运算符
发布时间:2026/7/15 20:15:32
摘要本文系统讲解Java运算符的核心知识涵盖算术、赋值、关系、逻辑、位运算符五大类别详细解析自增自减的前后置区别、逻辑运算符的短路特性、运算符优先级等关键概念并通过综合代码示例演示实际应用帮助初学者快速掌握Java数据处理的基础工具为后续学习if/switch等流程控制语句打下坚实基础。关键词Java运算符, 算术运算符, 逻辑运算符, 运算符优先级, 短路特性前面两篇我们聊了变量和常量——它们是数据的“容器”。但程序如果只是静静地存放数据那跟一个数据库没什么区别。程序真正的魅力在于处理数据把两个数字加起来、判断一个数是否大于另一个、把几个条件组合起来做决策……这些“处理动作”靠的就是今天的主角——运算符Operator。运算符就像是数学里的加减乘除符号但在编程里它的家族要庞大得多。今天我会带你认识 Java 中最常用的几类运算符并告诉你什么时候用、怎么用。别担心它们都很直观你很快就能上手。1. 算术运算符算术运算符就是我们从小熟悉的加减乘除外加取余求模和自增自减。运算符含义示例结果加法5 38-减法5 - 32*乘法5 * 315/除法5 / 31整数除法向下取整%取余模5 % 325 除以 3 的余数自增i或i自身加 1--自减i--或--i自身减 1最需要注意的就是除法如果两个操作数都是整数结果也是整数小数部分会被直接截掉不是四舍五入。如果想得到小数结果至少要把其中一个操作数变成浮点数。inta7;intb2;System.out.println(a/b);// 输出 3不是 3.5System.out.println(a/2.0);// 输出 3.5因为 2.0 是 double取余运算%很实用比如判断一个数是奇数还是偶数num % 2 0就是偶数。自增自减的前置与后置区别和--既可以放在变量前面前置也可以放在后面后置它们对变量的最终效果是一样的都加 1 或减 1但表达式的返回值不同前置i先自增再返回值。后置i先返回值再自增。看个例子就明白了inti5;intji;// i 先变成 6再把 6 赋给 j所以 i6, j6intx5;intyx;// 先把 5 赋给 y然后 x 变成 6所以 x6, y5初学时容易搞混我的建议是在独立的语句中使用自增自减比如单独写一行i;不要把它和赋值混在一起这样最安全。2. 赋值运算符最基本的赋值运算符就是等号它的作用是把右边的值赋给左边的变量。intage25;// 把 25 赋给 ageJava 还提供了一系列复合赋值运算符把算术运算和赋值合并在一起让代码更简洁运算符示例等价于a 5a a 5-a - 5a a - 5*a * 5a a * 5/a / 5a a / 5%a % 5a a % 5这些运算符不仅写起来短而且执行效率通常也略高一点点因为只计算一次左侧的地址。习惯使用它们能让代码更专业。inttotal100;total20;// total 变成 120total*2;// total 变成 240System.out.println(total);// 2403. 关系运算符关系运算符用来比较两个值结果是一个布尔值true或false。它们在条件判断如 if 语句中非常关键。运算符含义示例结果等于5 3false!不等于5 ! 3true大于5 3true小于5 3false大于等于5 3true小于等于5 3false⚠️ 特别注意是比较相等而是赋值。初学者经常把if (age 18)写错——这会把 18 赋给 age而不是比较而且编译器会报错因为类型不匹配。养成习惯比较时用。对于引用类型比如String比较的是内存地址而不是内容。要比较字符串的内容是否相等应该用equals()方法。我们以后会细说。4. 逻辑运算符逻辑运算符用来连接多个布尔表达式得到最终的布尔结果。它们主要用在复杂的条件判断中。运算符含义示例说明逻辑与ANDa 5 b 10两边都为真结果才为真逻辑或OR!逻辑非NOT!(a 5)将布尔值取反短路特性重要和||具有短路求值的特性对于如果左边已经是false右边就不再计算了因为整个表达式不可能为真了。对于||如果左边已经是true右边就不再计算了因为整个表达式已经为真了。这个特性不仅可以提高性能还常常被用来做“安全判断”。例如if(name!nullname.length()0){// 只有当 name 不为 null 时才会去调用 name.length()// 如果没有短路当 name 为 null 时调用 length() 会抛出 NullPointerException}如果你去掉左边的判断程序就可能崩溃。所以短路特性非常实用。逻辑运算符的优先级!||。如果不确定就用括号把条件分组既清晰又安全。booleanresult(a5)(b10)||(c0);// 加上括号明确优先级建议总是这样写booleanresult2((a5)(b10))||(c0);5. 位运算符位运算符操作的是整数在二进制层面上的位bit。它们在实际开发中不如前面几种常用但在一些场景比如权限控制、高效计算、网络协议解析中很关键。初学阶段了解即可不必深究。运算符含义示例二进制按位与5 3 10101 0011 0001按位或^按位异或5 ^ 3 60101 ^ 0011 0110~按位取反~5 -6补码运算不深入左移5 1 10相当于乘以 2右移5 1 2相当于除以 2 取整无符号右移忽略符号位右移正数同如果你现在看不懂这些完全没关系。位运算符不是必须马上掌握的我们会在以后的实际应用中比如权限组合再具体介绍。你只需要知道 Java 有这个能力就行。6. 运算符优先级当多个运算符混在一起时需要确定计算顺序。Java 有明确的优先级规则但不必死记硬背因为最稳妥的做法是使用小括号()来明确顺序。不过有一个大致的优先级印象还是有帮助的从高到低()括号、--前缀、!、~、正号、-负号*、/、%、-加减、、、、、、!^|||?:三元运算符我们下一篇会学赋值运算符、等最佳实践不要依赖优先级多用括号。括号不仅让计算顺序明确也让代码更易读。// 不清晰intresultab*c-d/e;// 清晰明了intresulta(b*c)-(d/e);7. 综合示例写一个小程序演示我们学到的运算符packagecom.example.demo;/** * 演示各类运算符的用法 */publicclassOperatorDemo{publicstaticvoidmain(String[]args){// ---- 1. 算术运算 ----inta10,b3;System.out.println(a b (ab));// 13System.out.println(a - b (a-b));// 7System.out.println(a * b (a*b));// 30System.out.println(a / b (a/b));// 3整数除法截断System.out.println(a % b (a%b));// 110除以3余1// ---- 2. 自增自减 ----intcount0;count;// count 变成 1count;// count 变成 2System.out.println(count count);// 2// 前置和后置的返回值区别intx5;intyx;// y 5, x 6System.out.println(x x, y y);// x6, y5intp5;intqp;// p 6, q 6System.out.println(p p, q q);// p6, q6// ---- 3. 复合赋值 ----inttotal100;total50;// total 150total*2;// total 300total%7;// 300 % 7 6 (7*42294, 余6)System.out.println(total total);// 6// ---- 4. 关系运算 ----booleanisEqual(ab);// falsebooleanisGreater(ab);// trueSystem.out.println(isEqual isEqual);System.out.println(isGreater isGreater);// ---- 5. 逻辑运算 ----intage20;booleanisAdultage18;booleanhasTickettrue;booleancanEnterisAdulthasTicket;// true true trueSystem.out.println(可以进入canEnter);// 短路示例Stringnamenull;// 下面的表达式不会抛出空指针因为左边为 false右边不会执行if(name!nullname.length()0){System.out.println(名字长度name.length());}else{System.out.println(名字为空或null);}// ---- 6. 位运算简单示例了解即可 ----intflags5;// 二进制 0101intmask3;// 二进制 0011intresultflagsmask;// 0001 1System.out.println(flags mask result);}}8. 常见陷阱与注意事项整数除法截断别指望7 / 2给你 3.5它会给你 3。如果需要小数记得把其中一个数转成浮点数例如7 / 2.0。比较浮点数因为浮点数精度问题不要直接用比较两个浮点数是否相等。应该判断它们的差的绝对值是否小于一个很小阈值比如0.000001。短路逻辑巧妙利用短路可以避免一些异常但也要注意如果右边的表达式有副作用比如改变变量值短路会导致它不执行这可能会埋下 bug。与equals对基本类型用对字符串等引用类型用equals()比较内容。我们会专门在字符串那一篇详细讲。今天的总结今天我们学习了 Java 中的五大类运算符算术运算符、-、*、/、%、、--赋值运算符以及复合赋值、-等关系运算符、!、、、、逻辑运算符、||、!注意短路特性位运算符入门了解、|、^、~、、进阶再深入你还知道了运算符优先级的概念以及用括号提高可读性的习惯。这些运算符就像是你的工具箱里的扳手、螺丝刀——单独看都很简单但组合起来就能完成复杂的任务。下一篇文章我们会用这些运算符搭建程序逻辑的第一个真正“决策”工具if 和 switch。动手试试写一段代码计算一个三位数比如 456的个位、十位、百位数字分别用变量表示并打印出来。提示用/和%运算符。写一个判断闰年的表达式年份能被 4 整除但不能被 100 整除或者能被 400 整除。把表达式写出来然后用几个年份如 2024、2100、2000验证一下。试试把double类型的两个小数如 0.1 和 0.2相加打印结果观察是不是精确的 0.3如果不是想想为什么。我们下一篇见。 获取本系列示例代码请访问 GitCode。