运算符

运算符用于对变量和值进行操作,本课学习Java中的各种运算符。

算术运算符

运算符 说明 示例 结果
+ 加法 5 + 3 8
- 减法 5 - 3 2
* 乘法 5 * 3 15
/ 除法 5 / 3 1(整数除法)
% 取余 5 % 3 2
++ 自增 i++ i增加1
-- 自减 i-- i减少1

示例:算术运算

JAVA
public class ArithmeticDemo {
    public static void main(String[] args) {
        int a = 10, b = 3;
        
        System.out.println("a + b = " + (a + b));  // 13
        System.out.println("a - b = " + (a - b));  // 7
        System.out.println("a * b = " + (a * b));  // 30
        System.out.println("a / b = " + (a / b));  // 3(整数除法,截断小数)
        System.out.println("a % b = " + (a % b));  // 1
        
        // 浮点除法
        double c = 10.0, d = 3.0;
        System.out.println("c / d = " + (c / d));  // 3.3333...
    }
}
▶ 试一试
⚠️ 整数除法: 两个整数相除,结果还是整数,小数部分被截断。要得到小数结果,至少一个操作数要是浮点数。

自增自减

JAVA
int i = 5;

// 后置++:先使用,后增加
int a = i++;  // a = 5, i = 6

// 前置++:先增加,后使用
int b = ++i;  // b = 7, i = 7

赋值运算符

运算符 说明 示例 等价于
= 赋值 a = 5
+= 加后赋值 a += 3 a = a + 3
-= 减后赋值 a -= 3 a = a - 3
*= 乘后赋值 a *= 3 a = a * 3
/= 除后赋值 a /= 3 a = a / 3
%= 取余后赋值 a %= 3 a = a % 3

示例:赋值运算

JAVA
public class AssignmentDemo {
    public static void main(String[] args) {
        int a = 10;
        System.out.println("初始值: " + a);  // 10
        
        a += 5;
        System.out.println("a += 5: " + a);  // 15
        
        a -= 3;
        System.out.println("a -= 3: " + a);  // 12
        
        a *= 2;
        System.out.println("a *= 2: " + a);  // 24
        
        a /= 4;
        System.out.println("a /= 4: " + a);  // 6
        
        a %= 4;
        System.out.println("a %= 4: " + a);  // 2
    }
}
▶ 试一试

比较运算符

比较运算符返回布尔值(true或false)。

运算符 说明 示例 结果
== 等于 5 == 5 true
!= 不等于 5 != 3 true
> 大于 5 > 3 true
< 小于 5 < 3 false
>= 大于等于 5 >= 5 true
<= 小于等于 5 <= 3 false

示例:比较运算

JAVA
public class ComparisonDemo {
    public static void main(String[] args) {
        int a = 10, b = 20;
        
        System.out.println("a == b: " + (a == b));  // false
        System.out.println("a != b: " + (a != b));  // true
        System.out.println("a > b: " + (a > b));    // false
        System.out.println("a < b: " + (a < b));    // true
        System.out.println("a >= 10: " + (a >= 10)); // true
        System.out.println("a <= 5: " + (a <= 5));   // false
    }
}
▶ 试一试

逻辑运算符

运算符 说明 示例 结果
&& 逻辑与 true && false false
|| 逻辑或 true || false true
! 逻辑非 !true false

逻辑运算真值表

A B A && B A || B !A
true true true true false
true false false true false
false true false true true
false false false false true

示例:逻辑运算

JAVA
public class LogicDemo {
    public static void main(String[] args) {
        int age = 25;
        boolean hasID = true;
        
        // 年龄大于18且有身份证
        boolean canEnter = (age >= 18) && hasID;
        System.out.println("可以进入: " + canEnter);  // true
        
        // 年龄小于12或大于60
        boolean isSpecial = (age < 12) || (age > 60);
        System.out.println("特殊人群: " + isSpecial);  // false
        
        // 逻辑非
        boolean isAdult = age >= 18;
        System.out.println("是成年人: " + isAdult);    // true
        System.out.println("不是成年人: " + !isAdult); // false
    }
}
▶ 试一试
💡 短路求值: &&如果左边为false,右边不会执行;||如果左边为true,右边不会执行。

三元运算符

三元运算符是if-else的简写形式。

JAVA
// 语法:条件 ? 值1 : 值2
int max = (a > b) ? a : b;

示例:三元运算符

JAVA
public class TernaryDemo {
    public static void main(String[] args) {
        int a = 10, b = 20;
        
        // 求最大值
        int max = (a > b) ? a : b;
        System.out.println("最大值: " + max);  // 20
        
        // 判断奇偶
        int num = 7;
        String result = (num % 2 == 0) ? "偶数" : "奇数";
        System.out.println(num + "是" + result);  // 7是奇数
        
        // 求绝对值
        int x = -5;
        int abs = (x >= 0) ? x : -x;
        System.out.println("绝对值: " + abs);  // 5
    }
}
▶ 试一试

运算符优先级

优先级高的先执行,可以用括号改变优先级。

优先级 运算符 说明
1 () 括号
2 ! ++ -- 一元运算符
3 * / % 乘除取余
4 + - 加减
5 < <= > >= 比较
6 == != 相等比较
7 && 逻辑与
8 || 逻辑或
9 ?: 三元运算符
10 = += -= 赋值

示例:优先级

JAVA
public class PrecedenceDemo {
    public static void main(String[] args) {
        // 乘法优先于加法
        int result1 = 2 + 3 * 4;
        System.out.println("2 + 3 * 4 = " + result1);  // 14,不是20
        
        // 用括号改变优先级
        int result2 = (2 + 3) * 4;
        System.out.println("(2 + 3) * 4 = " + result2);  // 20
    }
}
▶ 试一试
💡 建议: 复杂表达式多用括号,提高可读性,避免优先级错误。

类型提升

当不同类型的值混合运算时,小类型会自动提升为大类型。

JAVA
public class TypePromotion {
    public static void main(String[] args) {
        // int + long → long
        int a = 10;
        long b = 20;
        long c = a + b;
        
        // int + double → double
        int d = 10;
        double e = 3.14;
        double f = d + e;
        
        // byte + byte → int
        byte g = 10;
        byte h = 20;
        // byte i = g + h;  // 错误!结果是int类型
        int i = g + h;      // 正确
    }
}

❓ 常见问题

Q ==和equals有什么区别?
A ==比较基本类型的值,比较引用类型的地址。equals比较对象的内容。字符串比较要用equals。
Q i++和++i有什么区别?
A i++先使用后增加,++i先增加后使用。单独使用时效果一样,在表达式中才有区别。
Q 为什么0.1 + 0.2 != 0.3?
A 浮点数有精度问题,0.1和0.2在二进制中无法精确表示。比较浮点数要用范围判断。

📖 小节

📝 作业

  1. 算术练习: 输入秒数,转换为"X小时X分X秒"格式
  2. 比较练习: 判断一个年份是否是闰年(能被4整除但不能被100整除,或能被400整除)
  3. 三元练习: 输入三个数,用三元运算符求最大值

下一课

下一课我们将学习 条件语句,让程序根据条件做出判断。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏