【从零开始java学习|第六篇】运算符的使用与注意事项

目录

一、算术运算符

[1. 基本算术运算符(二元)](#1. 基本算术运算符(二元))

[2. 自增 / 自减运算符(一元)](#2. 自增 / 自减运算符(一元))

二、类型转换(隐式与强制)

[1. 隐式转换(自动类型转换)](#1. 隐式转换(自动类型转换))

​编辑

[2. 强制转换(显式类型转换)](#2. 强制转换(显式类型转换))

[三、字符串和字符的 "+" 操作](#三、字符串和字符的 “+” 操作)

四、赋值运算符

[1. 基本赋值运算符(=)](#1. 基本赋值运算符(=))

[2. 复合赋值运算符](#2. 复合赋值运算符)

五、关系运算符

六、逻辑运算符

[1. 基本逻辑运算符(非短路)](#1. 基本逻辑运算符(非短路))

[2. 短路逻辑运算符](#2. 短路逻辑运算符)

七、三元运算符

八、运算符优先级

九、总结


运算符是 Java 中用于执行运算的特殊符号,是程序逻辑实现的基础。根据功能不同,Java 运算符可分为算术运算符、赋值运算符、关系运算符、逻辑运算符、三元运算符等,且各类运算符存在明确的优先级规则。本文将系统总结各类运算符的特性、使用场景及注意事项。

一、算术运算符

算术运算符用于执行基本的数学运算,包括二元运算符 (需两个操作数)和一元运算符(需一个操作数)。

1. 基本算术运算符(二元)

运算符 功能 示例 说明
+ 加法 3 + 5 = 8 数字相加或字符串 / 字符拼接(见后文)
- 减法 10 - 4 = 6 数字相减
* 乘法 2 * 6 = 12 数字相乘
/ 除法 7 / 2 = 3 整数除法取商(非四舍五入);浮点数除法正常计算(7.0 / 2 = 3.5
% 取模(余) 7 % 2 = 1 结果符号与被除数一致(-7 % 2 = -17 % -2 = 1

2. 自增 / 自减运算符(一元)

用于操作数自身加 1 或减 1,分为前缀 (先运算后使用)和后缀(先使用后运算)两种形式。

运算符 功能 前缀示例(++a) 后缀示例(a++)
++ 自增(+1) int a=3; int b=++a;a=4, b=4 int a=3; int b=a++;a=4, b=3
-- 自减(-1) int a=3; int b=--a;a=2, b=2 int a=3; int b=a--;a=2, b=3

注意 :自增 / 自减运算符仅能作用于变量(如5++为错误写法),且在复杂表达式中需注意优先级(见后文)。

二、类型转换(隐式与强制)

当不同数据类型的操作数参与运算时,会发生类型转换,确保运算统一。

1. 隐式转换(自动类型转换)

  • 规则 :小范围类型自动转换为大范围类型(避免精度损失),转换顺序为:
    byte → short → int → long → float → doublechar 可转换为 int,因字符对应 ASCII 码)。

  • 示例

    复制代码
    int a = 10;  
    long b = a; // 正确:int(4字节)→ long(8字节)  
    float c = 3.14f;  
    double d = c; // 正确:float → double  

2. 强制转换(显式类型转换)

  • 规则 :大范围类型需手动转换为小范围类型,语法为 (目标类型) 操作数

  • 注意:可能导致精度损失或溢出(需手动控制风险)。

  • 示例

    复制代码
    double a = 3.9;  
    int b = (int) a; // 结果为3(精度损失)  
    long c = 10000000000L;  
    int d = (int) c; // 结果为-2147483648(溢出,因int范围为-2^31~2^31-1)  

一个练习进行记忆

三、字符串和字符的 "+" 操作

"+" 在 Java 中除算术加法外,还可用于字符串拼接或字符与其他类型的混合运算,规则如下:

  1. 字符串与任何类型拼接 :结果为字符串(其他类型自动转换为字符串)。

    示例:

    复制代码
    String s = "age: " + 18; // 结果为 "age: 18"  
    String s2 = "a" + true; // 结果为 "atrue"  
  2. 多个 "+" 连续运算 :从左到右执行,若左侧出现字符串,则后续均为拼接;否则先执行算术运算。

    示例:

    复制代码
    int a = 10;  
    String s3 = 5 + 3 + "a"; // 先算5+3=8,再拼接 → "8a"  
    String s4 = "a" + 5 + 3; // 从左到右拼接 → "a53"  
  3. 字符(char)与数字相加 :char 会转换为对应 ASCII 码(int 类型),执行算术加法。

    示例:

    复制代码
    char c = 'a'; // ASCII码为97  
    int sum = c + 1; // 结果为98('b'的ASCII码)  

四、赋值运算符

赋值运算符用于将右侧值赋给左侧变量,包括基本赋值复合赋值

1. 基本赋值运算符(=)

  • 功能:将右侧表达式结果赋给左侧变量(左侧必须是可修改的变量,不能是常量)。
  • 示例:int a = 5;

2. 复合赋值运算符

复合赋值是 "算术运算 + 赋值" 的简写,语法为 变量 运算符= 操作数,等价于 变量 = (变量类型)(变量 运算符 操作数)(隐含强制转换)。

运算符 等价写法 示例
+= a += ba = (a类型)(a + b) short s=1; s += 2; → 正确(隐含 short 转换)
-= a -= ba = (a类型)(a - b) int a=5; a -= 3;a=2
*= a *= ba = (a类型)(a * b) double d=2; d *= 3;d=6
/= a /= ba = (a类型)(a / b) int a=10; a /= 3;a=3
%= a %= ba = (a类型)(a % b) int a=7; a %= 3;a=1

注意 :复合赋值的隐含强制转换可避免部分类型错误,例如 short s=1; s = s + 2; 会报错(s+2 为 int),但 s += 2 正确。

五、关系运算符

关系运算符用于判断两个操作数的关系,结果为boolean 类型truefalse)。

运算符 功能 示例
== 等于 3 == 5 → false
!= 不等于 3 != 5 → true
> 大于 5 > 3 → true
< 小于 5 < 3 → false
>= 大于等于 5 >= 5 → true
<= 小于等于 3 <= 2 → false

注意

  • 区分 ==(判断相等)和 =(赋值),例如 if(a=3) 会恒为 true(因赋值结果为 3,非 0 即真),是常见错误。
  • 引用类型的 == 判断地址是否相同,而非内容(内容判断需用 equals() 方法)。

六、逻辑运算符

逻辑运算符用于连接 boolean 表达式,执行逻辑判断,结果为 boolean 类型。

1. 基本逻辑运算符(非短路)

运算符 功能 运算规则(a、b 为 boolean) 示例
& 逻辑与(且) 全为 true 则 true,否则 false true & false → false
逻辑或(或) 至少一个 true 则 true,全 false 则 false `true false → true`
! 逻辑非(取反) true→false,false→true !true → false
^ 逻辑异或 两个结果不同则 true,相同则 false true ^ true → false

特点 :无论左侧结果如何,右侧表达式都会执行(例如 (3>5) & (a++)>0 中,a++ 会执行)。

2. 短路逻辑运算符

运算符 功能 运算规则(a、b 为 boolean) 示例
&& 短路与 左侧为 false 时,右侧不执行,结果为 false;左侧为 true 时,需判断右侧 (3>5) && (a++)>0a不变
短路或 左侧为 true 时,右侧不执行,结果为 true;左侧为 false 时,需判断右侧 `(3<5) (a++)>0a` 不变

优势 :短路特性可提高效率(避免无用计算),例如 if(obj != null && obj.getValue() > 0) 可避免空指针异常(若 obj 为 null,右侧不执行)。

七、三元运算符

三元运算符是 Java 中唯一的三目运算符,语法为:

复制代码
条件表达式 ? 表达式1 : 表达式2  
  • 功能:条件表达式为 true 时,执行表达式 1;否则执行表达式 2。

  • 示例

    复制代码
    int max = (5 > 3) ? 5 : 3; // 结果为5  
    String res = (score >= 60) ? "及格" : "不及格";  
  • 注意 :表达式 1 和表达式 2 的类型必须兼容(可自动转换或显式转换),否则编译报错。例如 (3>2) ? 1 : 2.0 会报错(int 与 double 不兼容)。

八、运算符优先级

当多个运算符混合使用时,优先级决定执行顺序(优先级高的先执行),可通过括号 () 改变优先级(括号优先级最高)。从高到低的优先级顺序如下:

  1. 括号:()
  2. 单目运算符:++--!
  3. 算术运算符:*/%(高于 +-
  4. 关系运算符:><>=<=(高于 ==!=
  5. 逻辑运算符:!(高于 &&&& 高于 ||
  6. 三元运算符:? :
  7. 赋值运算符:=+=-=

示例

复制代码
int a = 3;  
int b = 5;  
int c = a + b * 2; // 先算b*2=10,再算a+10 → 13  
int d = (a + b) * 2; // 括号优先,先算a+b=8,再*2 → 16  
boolean e = a > 2 && b < 4 || !false; // 等价于 (a>2 && b<4) || true → false || true → true  

九、总结

Java 运算符是程序逻辑的基础,掌握各类运算符的功能、转换规则、短路特性及优先级,可避免常见错误(如整数除法精度问题、短路逻辑的副作用、=== 混淆等)。实际开发中,建议通过括号明确运算顺序,提高代码可读性。

通过合理使用运算符,能高效实现数值计算、逻辑判断、变量赋值等核心功能,是 Java 编程的必备技能。

相关推荐
岁忧6 分钟前
(LeetCode 每日一题) 1780. 判断一个数字是否可以表示成三的幂的和 (数学、三进制数)
java·c++·算法·leetcode·职场和发展·go
憨憨の大鸭鸭31 分钟前
python爬虫学习(2)
爬虫·学习
一颗星的征途1 小时前
java循环分页查询数据,任何把查询到的数据,分批处理,多线程提交到数据库清洗数据
java·数据库·mysql·spring cloud
浩少7021 小时前
LeetCode-16day:栈
java·数据结构·算法
布朗克1682 小时前
Java中Record的应用
java·record类型
IT毕设实战小研2 小时前
基于SpringBoot的救援物资管理系统 受灾应急物资管理系统 物资管理小程序
java·开发语言·vue.js·spring boot·小程序·毕业设计·课程设计
布朗克1683 小时前
Java 8 新特性介绍
java·java8·新特性
David爱编程3 小时前
Java 字符串拼接用 +、StringBuilder 还是 StringBuffer?一篇给你终极答案
java·后端
gAlAxy...3 小时前
Java List 集合详解(ArrayList、LinkedList、Vector)
java·开发语言