欢迎光临
我们一直在努力

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

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

一、算数运算符

1.1 运算符介绍

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

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

1.2 核心注意事项

  • 两个整数相除,结果仍然是整数,只会保留商,直接舍弃小数部分;
  • 如果想要得到小数结果,运算过程中必须有浮点数参与;
  • / 和 % 区分:/ 取商,% 取余数。
  • 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 使用规则

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

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

    四、数据类型转换

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

    4.1 隐式转换(自动转换)

    4.1.1 基础规则

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

    4.1.2 运算中的隐式转换
  • 不同范围数据运算时,范围小的类型会自动提升为范围大的类型,再进行计算,最终结果为大范围类型。
  • 特殊规则:byte、short、char 三者互相运算时,会统一先提升为 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 小结

  • 隐式转换:小范围 → 大范围,自动执行;运算时小类型统一提升为大类型。
  • byte、short、char 运算一律提升为 int。
  • 强制转换:大范围 → 小范围,手动书写语法,存在数据丢失风险。
  • 五、赋值运算符

    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 小结

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

    七、逻辑运算符

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

    7.1 基础逻辑运算符

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

    7.2 短路逻辑运算符

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

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

    7.3 小结

  • 普通 &、|:无论左侧结果如何,右侧表达式都会执行;
  • 短路 &&、||:具备短路效果,执行效率更高;
  • 实际开发中,优先使用 &&、||、!。
  • 八、三元运算符

    8.1 语法格式

    判断条件 ? 值1 : 值2;

    8.2 执行流程

  • 先计算布尔类型的判断条件;
  • 如果条件结果为 true,最终运算结果取 值 1;
  • 如果条件结果为 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 小结

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

    十、全文总结

  • 算数运算符:完成数学运算,整数相除取商不取小数,% 专门用于取余;
  • 字符串拼接:+ 遇到字符串变为连接符,从左至右依次执行;
  • 自增自减:单独使用无区别,混合使用遵循「前先变、后后变」;
  • 类型转换:小范围转大范围自动转换,大范围转小范围必须强制转换,存在精度丢失风险;
  • 赋值运算符:扩展赋值运算符自带强制转换,简化代码编写;
  • 关系运算符:结果为布尔值,注意区分 == 和 =;
  • 逻辑运算符:优先使用短路 &&、||,执行效率更高;
  • 三元运算符:简单条件二选一,精简分支代码;
  • 运算符优先级:复杂运算建议使用 () 手动指定顺序。
  • 运算符是 Java 逻辑代码的基础,后续分支、循环、集合等知识点都会大量用到,建议多编写案例练习,熟练掌握各类运算符的规则与易错点。

    赞(0)
    未经允许不得转载:171主机测评 » Java 运算符超详细整理,从入门到精通
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址