当前位置: 首页 > news >正文

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

目录

一、算术运算符

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

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

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

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

​编辑

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

三、字符串和字符的 “+” 操作

四、赋值运算符

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

2. 复合赋值运算符

五、关系运算符

六、逻辑运算符

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

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=4int a=3; int b=a++; → a=4, b=3
--自减(-1)int a=3; int b=--a; → a=2, b=2int 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 += b → a = (a类型)(a + b)short s=1; s += 2; → 正确(隐含 short 转换)
-=a -= b → a = (a类型)(a - b)int a=5; a -= 3; → a=2
*=a *= b → a = (a类型)(a * b)double d=2; d *= 3; → d=6
/=a /= b → a = (a类型)(a / b)int a=10; a /= 3; → a=3
%=a %= b → a = (a类型)(a % b)int a=7; a %= 3; → a=1

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

五、关系运算符

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

运算符功能示例
==等于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,否则 falsetrue & false → false
逻辑或(或)至少一个 true 则 true,全 false 则 false`truefalse → true`
!逻辑非(取反)true→false,false→true!true → false
^逻辑异或两个结果不同则 true,相同则 falsetrue ^ true → false

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

2. 短路逻辑运算符

运算符功能运算规则(a、b 为 boolean)示例
&&短路与左侧为 false 时,右侧不执行,结果为 false;左侧为 true 时,需判断右侧(3>5) && (a++)>0 → a不变
短路或左侧为 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 编程的必备技能。

http://www.dtcms.com/a/331765.html

相关文章:

  • 因果推断在用户流失预警的案例研究
  • 第2节:多模态的核心问题(多模态大模型基础教程)
  • 【Unity3D】Spine 3.8版本使用记录
  • 机器学习入门:从概念到实践的核心知识梳理
  • 【Linux系统】进程的生命旅程:从创建到独立的演绎
  • 智能体评测技术与实践:从评估维度到DeepEval实战指南
  • LeetCode Day6 -- 图
  • 速卖通商品详情接口深度开发:从多语言解析到跨境合规处理
  • 从零开始搭建React+TypeScript+webpack开发环境——基于MobX的枚举数据缓存方案设计与实践
  • react + i18n:国际化
  • HTML5二十四节气网站源码
  • 【web自动化】-1- 前端基础及selenium原理和环境安装
  • 传输层协议TCP(3)
  • Observer:优雅管理事件订阅的秘密武器
  • TCP 连接管理:深入分析四次握手与三次挥手
  • C++:浅尝gdb
  • 创客匠人:共情力在创始人IP塑造中的作用
  • 使用Docker和Miniconda3搭建YOLOv13开发环境
  • 如何在 Ubuntu 24.04 LTS Noble Linux 上安装 Wine HQ
  • Java多线程进阶-深入synchronized与CAS
  • RS232串行线是什么?
  • 考研408《计算机组成原理》复习笔记,第五章(1)——CPU功能和结构
  • C#WPF实战出真汁01--搭建项目三层架构
  • 解决 pip 安装包时出现的 ReadTimeoutError 方法 1: 临时使用镜像源(单次安装)
  • LeetCode 1780:判断一个数字是否可以表示成3的幂的和-进制转换解法
  • 基于 LDA 模型的安徽地震舆情数据分析
  • 相机Camera日志实例分析之十四:相机Camx【照片后置炫彩拍照】单帧流程日志详解
  • python——mock接口开发
  • CSS中的 :root 伪类
  • GitHub 仓库代码上传指南