Java 运算符超详细整理,从入门到精通

运算符是用来对变量、字面量进行运算操作的符号,是 Java 语法体系中不可或缺的一部分。本文将全面讲解算数运算符、字符串拼接、自增自减运算符、类型转换、赋值运算符、关系运算符、逻辑运算符、三元运算符、运算符优先级几大知识点,搭配语法讲解、代码案例、实战练习与易错点分析,零基础也能快速掌握,适合日常学习、代码练习与面试复习。

一、算数运算符

1.1 运算符介绍

算数运算符主要用于完成数学加减乘除运算,是最基础的运算符,具体规则如下:

符号作用说明
+常规数学加法运算
-常规数学减法运算
*等价于数学中的乘号×
/等价于数学中的除号÷,取除法运算的商
%取余获取两个数据做除法后的余数

1.2 核心注意事项

  1. 两个整数相除,结果仍然是整数,只会保留商,直接舍弃小数部分;
  2. 如果想要得到小数结果,运算过程中必须有浮点数参与;
  3. /% 区分:/ 取商,% 取余数。

1.3 实战案例:数值拆分

需求:将整数 123 拆分出个位、十位、百位并打印输出。

拆分公式
  • 个位:数值 % 10
  • 十位:数值 / 10 % 10
  • 百位:数值 / 10 / 10 % 10
  • 千位:数值 / 10 / 10 / 10 % 10
代码实现
public class ArithmeticDemo {
    public static void main(String[] args) {
        int num = 123;
        // 计算个位
        int ge = num % 10;
        // 计算十位
        int shi = num / 10 % 10;
        // 计算百位
        int bai = num / 10 / 10 % 10;

        System.out.println("整数123的个位为:" + ge);
        System.out.println("整数123的十位为:" + shi);
        System.out.println("整数123的百位为:" + bai);
    }
}

运行结果:

整数123的个位为:3
整数123的十位为:2
整数123的百位为:1

1.4 小结

整数相除无法直接得到小数,必须加入浮点数参与运算;多位数拆分可按照「连续整除 + 取余」的通用公式实现。

二、字符串拼接

2.1 规则说明

+ 运算符两侧任意一边出现字符串时,+ 不再是加法运算符,而是字符串连接符,作用是将前后内容拼接为一个完整字符串。

2.2 代码示例

public class StringJoinDemo {
    public static void main(String[] args) {
        // 纯数字:加法运算
        System.out.println(1 + 23);

        // 包含字符串:拼接操作
        System.out.println("年龄为:" + 23);
        // 从左至右依次运算,先算1+99,再和字符串拼接
        System.out.println(1 + 99 + "年黑马");
        // 先拼接字符串,后续数字全部参与拼接
        System.out.println("年龄为:" + 23 + 1);
        // 括号提升运算优先级,先计算括号内加法,再拼接
        System.out.println("年龄为:" + (23 + 1));
    }
}

运行结果:

24
年龄为:23
100年黑马
年龄为:231
年龄为:24

2.3 小结

表达式中一旦出现字符串,+ 就执行字符串拼接逻辑;可通过 () 改变运算顺序,优先完成数学计算。

三、自增自减运算符

3.1 运算符介绍

符号作用说明
++自增变量自身数值加 1
--自减变量自身数值减 1

++-- 可以写在变量前面或者变量后面,使用规则分两种场景。

3.2 使用规则

  1. 单独使用++-- 放在变量前、后,效果完全一致,都是变量自增 / 自减。
  2. 参与运算、打印、赋值等混合使用
    • 变量++先操作,后自增
    • ++变量先自增,后操作
  3. 硬性要求:++-- 只能操作变量,不能直接作用于字面量。

3.3 小结

自增自减核心区分点在于是否参与其他运算;单独使用位置无区别,混合使用严格遵循「前先变,后后变」规则。

四、数据类型转换

Java 中不同数据类型之间运算、赋值时,会自动触发类型转换,分为隐式转换(自动转换)强制转换两类。

4.1 隐式转换(自动转换)

4.1.1 基础规则

取值范围小的数值 / 变量,赋值给取值范围大的变量,程序自动完成转换,无需手动编写代码。数据类型范围从小到大顺序:byteshortintlongfloatdoublechar 类型也会参与隐式转换。

4.1.2 运算中的隐式转换
  1. 不同范围数据运算时,范围小的类型会自动提升为范围大的类型,再进行计算,最终结果为大范围类型。
  2. 特殊规则:byteshortchar 三者互相运算时,会统一先提升为 int 类型,再参与计算。
4.1.3 代码示例
public class AutoConvertDemo {
    public static void main(String[] args) {
        // 基础隐式转换:int 转 double
        int a = 10;
        double b = a;
        System.out.println(b);

        // 不同类型运算:int 提升为 double
        int num1 = 10;
        double num2 = 12.3;
        double res1 = num1 + num2;
        System.out.println(res1);

        // byte 运算自动提升为 int
        byte c1 = 10;
        byte c2 = 20;
        int res2 = c1 + c2;
        System.out.println(res2);

        // char 提升为 int(依据ASCII编码)
        int x = 1;
        char y = 'a';
        int res3 = x + y;
        System.out.println(res3);
    }
}

4.2 强制类型转换(显式转换)

4.2.1 基础规则

取值范围大的数值 / 变量,赋值给取值范围小的变量,无法自动转换,必须手动强制转换。语法格式:目标数据类型 变量名 = (目标数据类型) 待转换数据;

4.2.2 风险提示

强制类型转换可能造成精度丢失、数值溢出,使用时需要谨慎。

4.2.3 代码示例
public class ForceConvertDemo {
    public static void main(String[] args) {
        double d = 12.3;
        // double 强制转为 int,舍弃小数部分
        int num = (int) d;
        System.out.println(num);
    }
}

4.3 小结

  1. 隐式转换:小范围 → 大范围,自动执行;运算时小类型统一提升为大类型。
  2. byteshortchar 运算一律提升为 int
  3. 强制转换:大范围 → 小范围,手动书写语法,存在数据丢失风险。

五、赋值运算符

5.1 运算符分类与说明

分为基础赋值运算符和扩展赋值运算符:

符号名称作用说明
=基础赋值a=10,将右侧数值 10 赋值给左侧变量 a
+=加后赋值a += b 等价于 a = a + b
-=减后赋值a -= b 等价于 a = a - b
*=乘后赋值a *= b 等价于 a = a * b
/=除后赋值a /= b 等价于 a = a / b
%=取余后赋值a %= b 等价于 a = a % b

5.2 重要特性

扩展赋值运算符底层隐含强制类型转换,无需手动添加强转语法。

5.3 小结

= 是最基础的赋值符号;+=-= 等扩展运算符简化代码写法,且自带强制转换效果,开发中使用频率很高。

六、关系运算符

6.1 运算符说明

关系运算符用于判断两个数据的大小、相等关系,运算结果一定是 boolean 类型(true /false)

符号说明
==判断两个值是否相等,相等为 true,否则为 false
!=判断两个值是否不相等,不相等为 true,否则为 false
>判断左侧值是否大于右侧值
>=判断左侧值是否大于等于右侧值
<判断左侧值是否小于右侧值
<=判断左侧值是否小于等于右侧值

6.2 易错提醒

切勿将判断相等的 == 和赋值符号 = 混淆,二者语法、作用完全不同。

6.3 小结

关系运算符多用于条件判断,结果只有 truefalse 两种,重点区分 ===

七、逻辑运算符

逻辑运算符用于连接多个布尔表达式、布尔值,实现多条件组合判断,最终结果仍为 boolean 类型。

7.1 基础逻辑运算符

符号名称运算规则
&逻辑与所有条件都为 true,结果才为 true;遇 false 则整体为 false
``逻辑或任意一个条件为 true,结果就为 true;遇 true 则整体为 true
!逻辑非取反:true 变 false,false 变 true
^逻辑异或两边结果不同为 true,相同为 false

7.2 短路逻辑运算符

短路与、短路或是开发中最常用的运算符,具备短路特性

符号名称规则
&&短路与& 逻辑一致;若左侧为 false,右侧代码不再执行(短路)
``短路或和 `` 逻辑一致;若左侧为 true,右侧代码不再执行(短路)

7.3 小结

  1. 普通 &|:无论左侧结果如何,右侧表达式都会执行;
  2. 短路 &&||:具备短路效果,执行效率更高;
  3. 实际开发中,优先使用 &&||!

八、三元运算符

8.1 语法格式

判断条件 ? 值1 : 值2;

8.2 执行流程

  1. 先计算布尔类型的判断条件;
  2. 如果条件结果为 true,最终运算结果取 值 1
  3. 如果条件结果为 false,最终运算结果取 值 2

8.3 作用总结

根据条件二选一,简化简单的分支判断代码,是精简版的条件语句。

九、运算符优先级

9.1 优先级规则

Java 运算符存在默认执行优先级,优先级高的运算符会优先运算;日常开发中,不需要死记硬背优先级,可以使用小括号 () 手动改变运算顺序,让代码逻辑更清晰。

9.2 代码示例

public class PriorityDemo {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        // 默认优先级:&& 优先级高于 ||
        System.out.println(a > b || a < b && a > b);
        // 括号提升整体优先级
        System.out.println((a > b || a < b) && a > b);
    }
}

9.3 小结

复杂运算建议使用 () 划分运算顺序,降低代码阅读和出错概率。

十、全文总结

  1. 算数运算符:完成数学运算,整数相除取商不取小数,% 专门用于取余;
  2. 字符串拼接+ 遇到字符串变为连接符,从左至右依次执行;
  3. 自增自减:单独使用无区别,混合使用遵循「前先变、后后变」;
  4. 类型转换:小范围转大范围自动转换,大范围转小范围必须强制转换,存在精度丢失风险;
  5. 赋值运算符:扩展赋值运算符自带强制转换,简化代码编写;
  6. 关系运算符:结果为布尔值,注意区分 ===
  7. 逻辑运算符:优先使用短路 &&||,执行效率更高;
  8. 三元运算符:简单条件二选一,精简分支代码;
  9. 运算符优先级:复杂运算建议使用 () 手动指定顺序。

运算符是 Java 逻辑代码的基础,后续分支、循环、集合等知识点都会大量用到,建议多编写案例练习,熟练掌握各类运算符的规则与易错点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值