Java基础篇:运算符——数据处理的“数学工具”
本篇收录于《 零基础入门Java·基础篇 学习大纲》
Java基础篇:运算符——数据处理的“数学工具”
在Java编程中,我们每天都在和数据打交道:计算用户的订单金额、判断密码是否正确、比较两个数值的大小……这些操作的背后,都离不开运算符的支持。运算符就像编程世界里的“数学工具”,帮助我们对数据进行计算、比较和逻辑判断。
本文将系统讲解Java中的各类运算符,包括算术运算符、赋值运算符、关系运算符、逻辑运算符和三元运算符,结合实例说明它们的用法、特性及常见误区,帮你夯实Java基础。
一、运算符是什么?
运算符(Operator)是一种特殊的符号,用于告诉编译器执行特定的数学或逻辑操作。例如:
+可以计算两个数字的和(3 + 5)>可以比较两个值的大小(score > 60)&&可以判断两个条件是否同时成立(age >= 18 && hasId)
Java中的运算符可分为五大类,我们逐一展开讲解。
二、算术运算符:处理数值计算
算术运算符用于执行基本的数学运算(加、减、乘、除等),是最常用的运算符之一。
2.1 基本算术运算符
| 运算符 | 名称 | 示例 | 结果 |
|---|---|---|---|
+ | 加法 | 5 + 3 | 8 |
- | 减法 | 5 - 3 | 2 |
* | 乘法 | 5 * 3 | 15 |
/ | 除法 | 5 / 3 | 1 |
% | 取余 | 5 % 3 | 2 |
注意事项:
-
除法(/)的整数特性:
- 当两个整数相除时,结果只保留整数部分,舍弃小数(不会四舍五入):
System.out.println(5 / 2); // 输出2(而非2.5) System.out.println(5.0 / 2); // 输出2.5(浮点数参与则保留小数)
- 当两个整数相除时,结果只保留整数部分,舍弃小数(不会四舍五入):
-
取余(%)的符号规则:
- 结果的符号与被除数一致:
System.out.println(5 % 3); // 2(被除数5为正) System.out.println(-5 % 3); // -2(被除数-5为负)
- 结果的符号与被除数一致:
-
+的特殊用法:- 除了加法,
+还可以拼接字符串(当+两侧有一个是字符串时):System.out.println("年龄:" + 18); // 输出"年龄:18" System.out.println(10 + 20 + "分"); // 输出"30分"(先算10+20,再拼接) System.out.println("总分:" + 10 + 20); // 输出"总分:1020"(先拼接"总分:10",再拼接20)
- 除了加法,
2.2 自增/自减运算符(++/--)
用于将变量的值加1或减1,是算术运算符中的“简化操作”。
语法与区别:
- 前缀形式(
++i/--i):先改变变量值,再使用变量 - 后缀形式(
i++/--i):先使用变量,再改变变量值
示例:
int a = 5;
int b = ++a; // 前缀++:a先+1变为6,再赋值给b → b=6,a=6
int c = 5;
int d = c++; // 后缀++:c先赋值给d(d=5),再+1变为6 → d=5,c=6
System.out.println(a); // 6
System.out.println(b); // 6
System.out.println(c); // 6
System.out.println(d); // 5
常见误区:
不要在同一表达式中多次使用自增/自减,否则可读性极差且容易出错:
int x = 3;
// 不推荐:结果难以预测(不同编译器可能有不同处理方式)
int y = x++ + ++x;
三、赋值运算符:给变量赋值
赋值运算符用于将右侧的值赋给左侧的变量,最基础的是=,还有简化写法的复合赋值运算符。
3.1 基本赋值运算符(=)
int age = 18; // 将18赋值给变量age
String name = "Java"; // 将字符串"Java"赋值给变量name
- 注意:
=是赋值,不是“等于”(判断等于用==)。
3.2 复合赋值运算符
将“运算”和“赋值”合并,简化代码。
| 运算符 | 等价写法 | 示例 | 等价于 |
|---|---|---|---|
+= | a = a + b | a += 3 | a = a + 3 |
-= | a = a - b | a -= 3 | a = a - 3 |
*= | a = a * b | a *= 3 | a = a * 3 |
/= | a = a / b | a /= 3 | a = a / 3 |
%= | a = a % b | a %= 3 | a = a % 3 |
示例:
int num = 10;
num += 5; // 等价于 num = num + 5 → 结果num=15
num *= 2; // 等价于 num = num * 2 → 结果num=30
优势:
- 代码更简洁;
- 自动处理类型转换(针对基本数据类型):
byte b = 3; b += 2; // 正确:等价于 b = (byte)(b + 2),自动强转 b = b + 2; // 错误:b+2结果为int类型,无法直接赋值给byte
四、关系运算符:判断条件真假
关系运算符用于比较两个值的关系,结果一定是boolean类型(true或false),常用于条件判断(如if、while)。
| 运算符 | 名称 | 示例 | 结果 |
|---|---|---|---|
== | 等于 | 5 == 3 | false |
!= | 不等于 | 5 != 3 | true |
> | 大于 | 5 > 3 | true |
< | 小于 | 5 < 3 | false |
>= | 大于等于 | 5 >= 5 | true |
<= | 小于等于 | 5 <= 3 | false |
示例:
int score = 75;
boolean isPass = score >= 60; // true(75 >= 60成立)
boolean isExcellent = score == 100; // false(75不等于100)
System.out.println(isPass); // true
注意事项:
-
不要混淆
==和=:// 错误:if条件中用=是赋值,而非判断(会导致逻辑错误) if (score = 60) { ... } // 正确:用==判断是否等于 if (score == 60) { ... } -
字符串比较不能用
==:==比较的是对象地址,字符串内容比较需用equals()方法:String s1 = "hello"; String s2 = "hello"; System.out.println(s1 == s2); // true(特殊:常量池地址相同,不推荐用) String s3 = new String("hello"); System.out.println(s1 == s3); // false(地址不同) System.out.println(s1.equals(s3)); // true(内容相同,推荐用法)
五、逻辑运算符:组合条件判断
逻辑运算符用于组合多个布尔表达式,进行复杂的条件判断,结果仍是boolean类型。
| 运算符 | 名称 | 作用 | 示例(a=true, b=false) | 结果 |
|---|---|---|---|---|
&& | 逻辑与(短路与) | 两边都为true,结果才为true;若左边为false,右边不执行 | a && b | false |
|| | 逻辑或(短路或) | 两边有一个为true,结果就为true;若左边为true,右边不执行 | a || b | true |
! | 逻辑非 | 取反(true变false,false变true) | !a | false |
5.1 核心特性:短路效应
&&:如果左侧表达式为false,则右侧表达式不再执行(因为整体结果一定是false)。||:如果左侧表达式为true,则右侧表达式不再执行(因为整体结果一定是true)。
示例:短路效应的影响
int x = 1;
// &&左侧为false,右侧x++不执行 → x仍为1
boolean result1 = (x > 5) && (x++ > 0);
System.out.println(x); // 1
int y = 1;
// ||左侧为true,右侧y++不执行 → y仍为1
boolean result2 = (y < 5) || (y++ > 0);
System.out.println(y); // 1
5.2 实际应用场景
逻辑运算符常用于组合多个条件,例如:
int age = 20;
boolean hasId = true;
// 判断是否满足“成年且有身份证”
if (age >= 18 && hasId) {
System.out.println("可以进入");
}
// 判断是否“未成年或无身份证”
if (age < 18 || !hasId) {
System.out.println("禁止进入");
}
六、三元运算符:简化二选一判断
三元运算符(条件 ? 表达式1 : 表达式2)是Java中唯一需要三个操作数的运算符,用于简化简单的二选一逻辑。
6.1 语法与执行逻辑
结果 = 布尔表达式 ? 表达式1 : 表达式2;
- 若布尔表达式为
true,结果为表达式1; - 若布尔表达式为
false,结果为表达式2。
6.2 示例:替代简单if-else
int a = 10, b = 20;
// 传统if-else求较大值
int max;
if (a > b) {
max = a;
} else {
max = b;
}
// 三元运算符简化
int max = a > b ? a : b; // 直接得到较大值20
6.3 适用场景与限制
- 适用场景:简单的二选一逻辑,且需要返回一个结果(如赋值、输出)。
- 限制:
- 不能替代复杂逻辑(如多条语句执行);
- 嵌套使用会降低可读性(不推荐):
// 不推荐:嵌套三元运算符,可读性差 int score = 75; String result = score >= 90 ? "优秀" : (score >= 60 ? "及格" : "不及格");
七、运算符优先级:谁先执行?
当一个表达式中存在多个运算符时,执行顺序由优先级决定(类似数学中的“先乘除后加减”)。
优先级从高到低(核心部分):
- 括号
()(最高优先级,可手动改变执行顺序) - 自增/自减
++/-- - 算术运算符(先
*///%,后+/-) - 关系运算符(
>/</>=/<=高于==/!=) - 逻辑运算符(先
!,再&&,最后||) - 三元运算符
? : - 赋值运算符(
=/+=/-=等,最低优先级)
示例:优先级的影响
int result = 3 + 4 * 2;
// 先算4*2=8,再算3+8=11 → result=11
int result2 = (3 + 4) * 2;
// 括号改变优先级,先算3+4=7,再算7*2=14 → result2=14
boolean flag = 5 > 3 && 8 < 4 || !false;
// 执行顺序:!false → 5>3 → 8<4 → && → || → 结果为true
建议:
- 不必死记所有优先级,复杂表达式中用括号明确执行顺序,既避免错误又提升可读性:
// 推荐:用括号明确逻辑 boolean isOk = (age >= 18) && (score > 60);
八、常见错误与避坑指南
-
整数除法丢失精度:
// 需求:计算3除以2的结果(1.5) System.out.println(3 / 2); // 错误:输出1(整数除法) System.out.println(3.0 / 2); // 正确:输出1.5(浮点数参与) -
==与equals的混淆:String s = "java"; // 错误:字符串比较用==(可能因地址不同导致错误) if (s == "java") { ... } // 正确:用equals()比较内容 if (s.equals("java")) { ... } -
短路效应导致的逻辑错误:
int num = 0; // 错误:依赖右侧num++改变值,但左侧为false导致右侧不执行 if (num > 5 && num++ > 0) { ... } System.out.println(num); // 仍为0,而非预期的1 -
自增/自减的滥用:
int a = 1; // 错误:同一表达式多次自增,结果混乱 int b = a++ + ++a; // 不推荐写法
九、实战练习:综合运用运算符
实现一个简易的学生成绩评估系统:输入学生分数,计算总分(满分100)、等级(A/B/C/D)及是否获奖(A等级奖励100元,B等级奖励50元)。
import java.util.Scanner;
public class ScoreEvaluator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入学生分数(0-100):");
int score = scanner.nextInt();
// 1. 校验分数合法性(关系运算符+逻辑运算符)
if (score < 0 || score > 100) {
System.out.println("输入错误:分数必须在0-100之间");
return;
}
// 2. 判断等级(算术运算符/关系运算符)
char level;
if (score >= 90) {
level = 'A';
} else if (score >= 80) {
level = 'B';
} else if (score >= 60) {
level = 'C';
} else {
level = 'D';
}
// 3. 计算奖励(三元运算符)
int reward = (level == 'A') ? 100 : (level == 'B' ? 50 : 0);
// 4. 输出结果(+拼接字符串)
System.out.println("分数:" + score);
System.out.println("等级:" + level);
System.out.println("奖励:" + reward + "元");
scanner.close();
}
}
运行效果:
请输入学生分数(0-100):85
分数:85
等级:B
奖励:50元
十、总结
运算符是Java处理数据的基础工具,掌握它们的用法是编写逻辑正确的代码的前提:
- 算术运算符:处理数值计算,注意整数除法和
+的字符串拼接特性。 - 赋值运算符:
=用于赋值,复合赋值(+=等)简化代码并自动处理类型转换。 - 关系运算符:返回
boolean值,用于条件判断,字符串比较需用equals()。 - 逻辑运算符:组合条件,利用短路效应提升效率,但需注意副作用。
- 三元运算符:简化简单二选一逻辑,避免嵌套使用。
通过大量练习(如计算折扣、判断闰年、实现简易计算器),可以快速熟悉各类运算符的特性,为后续学习选择结构、循环结构打下坚实基础。
若有转载,请标明出处:https://blog.csdn.net/CharlesYuangc/article/details/153565194
2126

被折叠的 条评论
为什么被折叠?



