Java基础篇:运算符——数据处理的“数学工具”


本篇收录于《 零基础入门Java·基础篇 学习大纲

Java基础篇:运算符——数据处理的“数学工具”

在Java编程中,我们每天都在和数据打交道:计算用户的订单金额、判断密码是否正确、比较两个数值的大小……这些操作的背后,都离不开运算符的支持。运算符就像编程世界里的“数学工具”,帮助我们对数据进行计算、比较和逻辑判断。

本文将系统讲解Java中的各类运算符,包括算术运算符、赋值运算符、关系运算符、逻辑运算符和三元运算符,结合实例说明它们的用法、特性及常见误区,帮你夯实Java基础。

一、运算符是什么?

运算符(Operator)是一种特殊的符号,用于告诉编译器执行特定的数学或逻辑操作。例如:

  • + 可以计算两个数字的和(3 + 5
  • > 可以比较两个值的大小(score > 60
  • && 可以判断两个条件是否同时成立(age >= 18 && hasId

Java中的运算符可分为五大类,我们逐一展开讲解。

二、算术运算符:处理数值计算

算术运算符用于执行基本的数学运算(加、减、乘、除等),是最常用的运算符之一。

2.1 基本算术运算符

运算符名称示例结果
+加法5 + 38
-减法5 - 32
*乘法5 * 315
/除法5 / 31
%取余5 % 32
注意事项:
  1. 除法(/)的整数特性

    • 当两个整数相除时,结果只保留整数部分,舍弃小数(不会四舍五入):
      System.out.println(5 / 2); // 输出2(而非2.5)
      System.out.println(5.0 / 2); // 输出2.5(浮点数参与则保留小数)
      
  2. 取余(%)的符号规则

    • 结果的符号与被除数一致:
      System.out.println(5 % 3); // 2(被除数5为正)
      System.out.println(-5 % 3); // -2(被除数-5为负)
      
  3. +的特殊用法

    • 除了加法,+还可以拼接字符串(当+两侧有一个是字符串时):
      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 + ba += 3a = a + 3
-=a = a - ba -= 3a = a - 3
*=a = a * ba *= 3a = a * 3
/=a = a / ba /= 3a = a / 3
%=a = a % ba %= 3a = 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类型(truefalse),常用于条件判断(如ifwhile)。

运算符名称示例结果
==等于5 == 3false
!=不等于5 != 3true
>大于5 > 3true
<小于5 < 3false
>=大于等于5 >= 5true
<=小于等于5 <= 3false
示例:
int score = 75;
boolean isPass = score >= 60; // true(75 >= 60成立)
boolean isExcellent = score == 100; // false(75不等于100)

System.out.println(isPass); // true
注意事项:
  1. 不要混淆===

    // 错误:if条件中用=是赋值,而非判断(会导致逻辑错误)
    if (score = 60) { ... }
    
    // 正确:用==判断是否等于
    if (score == 60) { ... }
    
  2. 字符串比较不能用==

    • ==比较的是对象地址,字符串内容比较需用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 && bfalse
||逻辑或(短路或)两边有一个为true,结果就为true;若左边为true,右边不执行a || btrue
!逻辑非取反(true变false,false变true)!afalse

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 ? "及格" : "不及格");
      

七、运算符优先级:谁先执行?

当一个表达式中存在多个运算符时,执行顺序由优先级决定(类似数学中的“先乘除后加减”)。

优先级从高到低(核心部分):

  1. 括号 ()(最高优先级,可手动改变执行顺序)
  2. 自增/自减 ++/--
  3. 算术运算符(先*///%,后+/-
  4. 关系运算符(>/</>=/<= 高于 ==/!=
  5. 逻辑运算符(先!,再&&,最后||
  6. 三元运算符 ? :
  7. 赋值运算符(=/+=/-=等,最低优先级)

示例:优先级的影响

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);
    

八、常见错误与避坑指南

  1. 整数除法丢失精度

    // 需求:计算3除以2的结果(1.5)
    System.out.println(3 / 2); // 错误:输出1(整数除法)
    System.out.println(3.0 / 2); // 正确:输出1.5(浮点数参与)
    
  2. ==equals的混淆

    String s = "java";
    // 错误:字符串比较用==(可能因地址不同导致错误)
    if (s == "java") { ... }
    // 正确:用equals()比较内容
    if (s.equals("java")) { ... }
    
  3. 短路效应导致的逻辑错误

    int num = 0;
    // 错误:依赖右侧num++改变值,但左侧为false导致右侧不执行
    if (num > 5 && num++ > 0) { ... }
    System.out.println(num); // 仍为0,而非预期的1
    
  4. 自增/自减的滥用

    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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九皇叔叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值