一、回顾与本篇目标
上一篇你学会了变量和数据类型。你知道变量是一个带名字的存储空间,声明时要用 int age = 28; 这样的语法,Java 有八种基本数据类型,最常用的是 int、double、char、boolean。
但光有变量还不够——变量只是把数据存起来了,真正让程序有用的是对这些数据进行计算。比如:计算购物车总价、判断年龄是否满 18 岁、统计考试成绩是否及格。这些都需要运算符。
运算符就像数学中的加减乘除符号——它们告诉计算机要对数据做什么操作。Java 中的运算符分为好几类:算术运算符、比较运算符、逻辑运算符、赋值运算符。这一篇把它们全部讲透。
本篇的目标:
- 学会使用算术运算符进行数学计算
- 学会使用比较运算符判断大小、相等
- 学会使用逻辑运算符组合多个条件
- 理解赋值运算符和自增自减
- 掌握运算符的优先级
二、表达式和运算符是什么
表达式是由变量、字面量、运算符组成的能计算出结果的式子。就像数学课上学的一样——3 + 5 是一个表达式,计算结果是 8。
在 Java 中:
int sum = 10 + 20; // 10 + 20 是表达式,结果 30
int result = sum * 2; // sum * 2 是表达式,结果 60
boolean isAdult = age >= 18; // age >= 18 是表达式,结果 true 或 false
表达式中的 +、*、>= 这些符号就是运算符。它们告诉计算机要对数据做什么操作。
三、算术运算符——数学计算
算术运算符用来做数学计算,和你在数学课上学的一样:
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
+ |
加法 | 10 + 3 |
13 |
- |
减法 | 10 - 3 |
7 |
* |
乘法 | 10 * 3 |
30 |
/ |
除法 | 10 / 3 |
3(注意!) |
% |
取余数 | 10 % 3 |
1 |
除法 / 有一个非常重要的规则:两个整数相除,结果还是整数——小数部分会被直接丢弃(不是四舍五入)。
int a = 10;
int b = 3;
int result = a / b;
System.out.println(result); // 输出 3,不是 3.333!
// 要得到小数结果,至少有一边是小数类型
double result2 = 10.0 / 3; // 3.3333333
double result3 = 10 / 3.0; // 3.3333333
double result4 = (double) a / b; // 3.3333333(强制转换)
取余数 % 就是求“除不尽的那部分”。比如 10 ÷ 3 = 3 余 1,所以 10 % 3 等于 1。这在判断奇偶性(n % 2 == 0 表示偶数)、循环中每隔几个执行一次等场景非常有用。
算术运算的完整示例
public class ArithmeticDemo {
public static void main(String[] args) {
int a = 17;
int b = 5;
System.out.println("a = " + a + ", b = " + b);
System.out.println("a + b = " + (a + b)); // 22
System.out.println("a - b = " + (a - b)); // 12
System.out.println("a * b = " + (a * b)); // 85
System.out.println("a / b = " + (a / b)); // 3(整数除法)
System.out.println("a % b = " + (a % b)); // 2(17除以5余2)
System.out.println("a / b 的小数结果 = " + (double) a / b); // 3.4
}
}
四、比较运算符——判断大小和相等
比较运算符用来比较两个值之间的关系。比较的结果是一个 boolean 值——true(真)或 false(假)。
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
> |
大于 | 10 > 5 |
true |
< |
小于 | 10 < 5 |
false |
>= |
大于等于 | 10 >= 10 |
true |
<= |
小于等于 | 5 <= 3 |
false |
== |
等于 | 10 == 10 |
true |
!= |
不等于 | 10 != 5 |
true |
特别注意:判断相等用两个等号 ==,不是一个等号 =。一个等号是赋值,两个等号是比较。这是初学者最容易犯的错误之一。
int age = 20;
// 判断年龄是否大于等于 18
boolean isAdult = age >= 18;
System.out.println("是否成年:" + isAdult); // true
// 判断分数是否及格
int score = 85;
boolean isPass = score >= 60;
System.out.println("是否及格:" + isPass); // true
// 判断两个数字是否相等
int x = 10;
int y = 20;
System.out.println(x == y); // false
System.out.println(x != y); // true
五、逻辑运算符——组合多个条件
有时候一个条件不够,需要同时满足多个条件,或者满足其中任意一个就行。逻辑运算符就是用来连接多个条件的。
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
&& |
并且(AND)——两边都成立才为真 | age >= 18 && age <= 60 |
年龄在 18 到 60 之间 |
|| |
或者(OR)——任意一边成立就为真 | score < 0 || score > 100 |
分数超出有效范围 |
! |
取反(NOT)——真假颠倒 | !isLoggedIn |
如果未登录则为 true |
&&(并且)
两边条件都成立时,整个表达式才成立。就像高考录取——既要总分过线,又要单科过线。
int age = 25;
boolean hasTicket = true;
// 必须年满 18 岁,并且有票,才能入场
boolean canEnter = age >= 18 && hasTicket;
System.out.println("能否入场:" + canEnter); // true
// 如果有一个条件不满足
boolean noTicket = false;
boolean canEnter2 = age >= 18 && noTicket;
System.out.println("能否入场:" + canEnter2); // false
||(或者)
两边条件任意一个成立时,整个表达式就成立。就像商场促销——有会员卡可以打折,或者消费满 500 也可以打折。
boolean isMember = false;
double totalPrice = 600;
// 是会员 或者 消费满 500,都可以享受折扣
boolean canDiscount = isMember || totalPrice >= 500;
System.out.println("能否享受折扣:" + canDiscount); // true
!(取反)
把 true 变成 false,把 false 变成 true。
boolean isLoggedIn = false;
// 如果 没有 登录,就提示请登录
if (!isLoggedIn) {
System.out.println("请先登录");
}
六、赋值运算符——存值和简写
赋值运算符最基础的就是 =——把右边的值存进左边的变量。除此之外,Java 还提供了一些简写形式——当你要在变量现有值的基础上做运算并存回去时,可以用简写。
| 运算符 | 含义 | 示例 | 等价于 |
|---|---|---|---|
= |
赋值 | x = 10 |
— |
+= |
加后赋值 | x += 5 |
x = x + 5 |
-= |
减后赋值 | x -= 3 |
x = x - 3 |
*= |
乘后赋值 | x *= 2 |
x = x * 2 |
/= |
除后赋值 | x /= 4 |
x = x / 4 |
%= |
取余后赋值 | x %= 3 |
x = x % 3 |
int score = 80;
score += 10; // score = 90(加了 10 分)
score -= 5; // score = 85(扣了 5 分)
score *= 2; // score = 170(翻倍)
score /= 3; // score = 56(除以 3,整数除法)
System.out.println(score); // 56
七、自增和自减——加 1 和减 1 的快捷方式
在编程中,让一个变量加 1 或减 1 是非常常见的操作——比如计数器、循环索引。Java 提供了更简洁的写法:
| 运算符 | 含义 | 示例 | 等价于 |
|---|---|---|---|
++ |
自增(加 1) | x++ 或 ++x |
x = x + 1 |
-- |
自减(减 1) | x-- 或 --x |
x = x - 1 |
前置和后置的区别:++ 写在变量前面还是后面,单独写一行时效果相同。但如果它和其他操作混在一起,顺序就有影响了:
int a = 10;
int b = a++; // 后置:先把 a 的值赋给 b,然后 a 再加 1
// 结果:b = 10, a = 11
int c = 10;
int d = ++c; // 前置:先让 c 加 1,然后把新值赋给 d
// 结果:d = 11, c = 11
建议:刚开始编程时,把 ++ 和 -- 单独写一行,不要和其他操作混在一起。这样代码最清晰,不会产生歧义。
int count = 0;
count++; // 清晰:count 增加 1
System.out.println(count); // 1
八、运算符的优先级
当一个表达式中有多个运算符时,哪个先算?这和数学中的“先乘除后加减”是同一个道理。
优先级从高到低排列(不需要死记,用到的时候查表就行):
| 优先级 | 运算符 | 说明 |
|---|---|---|
| 最高 | () |
括号——最优先 |
! ++ -- |
取反、自增、自减 | |
* / % |
乘、除、取余 | |
+ - |
加、减 | |
> < >= <= |
比较 | |
== != |
相等、不等 | |
&& |
逻辑与 | |
| 最低 | || |
逻辑或 |
不要依赖记忆来写复杂表达式——用括号明确你的意图。 括号不仅让代码正确,更让读代码的人(包括三个月后的你自己)一眼就能看懂。
// 不清晰:依赖优先级
int result = 10 + 5 * 2; // 20(先乘后加)
// 清晰:用括号明确意图
int result2 = (10 + 5) * 2; // 30(先加后乘)
九、综合演示:购物结算小程序
下面这个程序综合运用了本篇学的所有运算符:
public class ShoppingDemo {
public static void main(String[] args) {
// 商品信息
String productName = "Java 编程书";
double unitPrice = 59.80; // 单价
int quantity = 3; // 数量
double discount = 0.85; // 折扣率(8.5折)
// 计算金额
double originalTotal = unitPrice * quantity; // 原价总价
double finalTotal = originalTotal * discount; // 折后总价
double saved = originalTotal - finalTotal; // 省了多少钱
// 判断是否包邮
boolean freeShipping = finalTotal >= 99;
// 判断是否为整数数量(用取余判断)
boolean isBulk = quantity >= 5;
// 输出结果
System.out.println("========== 购物结算 ==========");
System.out.println("商品:" + productName);
System.out.println("单价:¥" + unitPrice);
System.out.println("数量:" + quantity);
System.out.println("折扣:" + (int)(discount * 100) + "%");
System.out.println("-----------------------------");
System.out.println("原价总价:¥" + originalTotal);
System.out.println("折后总价:¥" + finalTotal);
System.out.println("为您节省:¥" + saved);
System.out.println("-----------------------------");
System.out.println("是否包邮:" + freeShipping);
System.out.println("是否批发(>=5本):" + isBulk);
System.out.println("==============================");
}
}
输出:
========== 购物结算 ==========
商品:Java 编程书
单价:¥59.8
数量:3
折扣:85%
-----------------------------
原价总价:¥179.39999999999998
折后总价:¥152.48999999999998
为您节省:¥26.91
-----------------------------
是否包邮:true
是否批发(>=5本):false
==============================
注意到价格出现了很多位小数(179.39999999999998)——这是计算机浮点数的精度问题,几乎所有编程语言都有这个现象。处理金额时通常用int存“分”而不是用double存“元”,或者使用BigDecimal类。现在知道有这个问题就行,后面会深入讨论。
十、本篇动手练习
练习 1:计算圆的面积和周长
新建 Practice3_1.java。声明圆的半径 radius = 5.0,声明常量 PI = 3.14159。计算面积(PI × radius × radius)和周长(2 × PI × radius),打印结果。
练习 2:闰年判断
新建 Practice3_2.java。声明一个年份变量 int year = 2024;。用逻辑运算符判断它是不是闰年。闰年规则:能被 4 整除但不能被 100 整除,或者能被 400 整除。打印判断结果。
练习 3:数字拆分
新建 Practice3_3.java。声明一个三位整数 int num = 357;。用除法和取余运算分别取出它的百位、十位、个位数字,分别打印出来。
练习 4:温度转换器
新建 Practice3_4.java。声明一个摄氏温度 double celsius = 30.0;。用公式 华氏度 = 摄氏度 × 9/5 + 32 计算华氏温度。注意 9/5 的问题。同时判断这个温度是否超过 38°C(高温预警),打印所有结果。
十一、本篇小结
这一篇你学会了 Java 中的运算符:
- 算术运算符:
+、-、*、/、%。整数相除结果是整数(小数被截断)。%是取余数。 - 比较运算符:
>、<、>=、<=、==、!=。结果是一个 boolean 值(true或false)。判断相等用两个等号==,赋值用一个等号=。 - 逻辑运算符:
&&(并且)、||(或者)、!(取反)。用来组合多个条件。 - 赋值运算符:
=、+=、-=、*=、/=、%=。简写形式让代码更简洁。 - 自增自减:
++和--。建议单独写一行,避免和其他操作混用。 - 运算符优先级:不确定的时候加括号。括号是最清晰的表达方式。
运算符是让程序“动起来”的关键——变量存数据,运算符处理数据。下一篇,我们学习条件判断——让程序根据不同情况做不同的事情。
下一篇预告
下一篇——《条件判断——让程序做选择》:if/else if/else 分支结构、switch/case 多分支选择、三元运算符。你会写出能根据不同分数显示不同等级的评分程序。
Java 零基础入门,每周更新。











暂无评论内容