【从零开始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.pswp.cn/bicheng/93289.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shellgpt

一、介绍 官网&#xff1a;https://github.com/TheR1D/shell_gpt ShellGPT&#xff08;shell_gpt&#xff09; 是一款把 GPT 系列大模型能力直接搬到终端 的开源命令行生产力工具。用日常英语或中文描述需求&#xff0c;就能帮你 生成、解释甚至自动执行 Shell 命令&#xff…

geoserver sql视图调用Postgis自定义函数问题记录

一、问题描述&#xff1a;geoserver sql视图调用Postgis自定义函数对点图层增加一条记录时&#xff0c;返回结果主键自增ID加了2&#xff0c;但表中数据只增加一条记录。 但在pgAdmin中直接写SQL调用Postgis自定义函数对点图层增加一条记录时&#xff0c;返回结果主键自增ID只加…

#T1224. 最大子矩阵

题目传送 题目描述 已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵&#xff0c;你的任务是找到最大的非空(大小至少是11)子矩阵。 比如&#xff0c;如下44的矩阵 0 -2 -7 09 2 -6 2 -4 1 -4 1-1 8 0 -2的最大子矩阵是 9 2-4 1-1 8这…

2025年大模型安全岗的面试汇总(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 1. Transformer核心机制及其对LLM突破的基石作用 2. LLM能力边界评估框架设计 3. 模型层级安全风险分析 …

《关于省级政务云服务费支出预算标准的规定》豫财预〔2024〕106号解读

《关于省级政务云服务费支出预算标准的规定》豫财预〔2024〕106号文件由河南省财政厅编制经省政府同意后于2024年12月3日印发执行&#xff0c;规定作为省级政务云服务费支出预算编制和审核的依据&#xff0c;旨在加强省级部门预算管理&#xff0c;规范政务云服务费支出预算编制…

使用HalconDotNet实现异步多相机采集与实时处理

文章目录 一、核心功能与原理 功能目标: 工作原理: 关键机制: 二、完整C#实现代码 三、关键实现解析 1. 零拷贝图像传输 2. 动态帧率控制 3. HALCON并行优化 4. 异常隔离机制 四、高级优化策略 1. 硬件加速配置 2. 内存池管理 3. 实时性保障 一、核心功能与原理 功能目标:…

《疯狂Java讲义(第3版)》学习笔记ch4

ch4流程控制与数组1.switch语句后的expression表达式的数据类型只能是byte、short、char、int四种证书类型。2.建议不要在循环体内修改循环变量&#xff08;也叫循环计数器&#xff09;的值&#xff0c;否则会增加程序出错的可能性。3.定义数组推荐语法格式&#xff1a;type[] …

COLMAP进行密集重建,三维重建的步骤

密集重建是在稀疏重建的基础上进行的 稀疏重建见&#xff1a;用 COLMAP GUI 在 Windows 下一步步完成 相机位姿估计&#xff08;SfM&#xff09; 和 稀疏点云重建的详细步骤&#xff1a;_colmap database导入图片位姿-CSDN博客 完成稀疏重建后直接进入以下步骤进行密集重建&am…

基于飞算JavaAI实现Reactor模式服务器的深度实践

一、飞算JavaAI技术概述 1.1 飞算JavaAI平台简介飞算JavaAI是飞算科技推出的智能化Java开发平台&#xff0c;通过AI技术赋能传统软件开发流程&#xff0c;为开发者提供从需求分析到代码实现的全流程智能化解决方案。该平台深度融合了人工智能技术与软件开发实践&#xff0c;具备…

量子人工智能

量子人工智能&#xff08;QAI&#xff09;是量子计算与人工智能的强大融合。这一领域旨在将量子系统独特的计算能力与人工智能的模式识别和学习能力相结合&#xff0c;以更快、更高效地解决问题。 量子人工智能与常规人工智能的区别是什么&#xff1f;常规人工智能在经典计算机…

算法题Day1

1. 练习1&#xff1a;Hello,World!解题步骤:using namespace std; int main() {cout<<"Hello,World!"<<endl;return 0; }2. 练习2&#xff1a;打印飞机解题步骤:#include <iostream> using namespace std; int main() {cout << " …

Cypher注入详解:原理、类型与测试方法

Cypher&#xff0c;全称为 (Open) Cypher Query Language&#xff0c;是一种专为图数据库设计的声明式查询语言。它以直观的模式匹配方式&#xff0c;帮助开发者和数据分析师从复杂的图结构数据中检索、创建和修改信息。如果说 SQL 是关系型数据库的语言&#xff0c;那么 Cyphe…

PG靶机 - Pelican

一、 初步侦察与服务探测 1.1 端口扫描与服务识别 首先&#xff0c;对目标主机 192.168.163.98 进行全面的端口扫描&#xff0c;以识别所有开放的服务。 sudo nmap 192.168.163.98 -p- --min-rate5000 -A图 1: Nmap 扫描结果&#xff0c;显示多个开放端口 扫描结果表明&#xf…

【1】Transformers快速入门:自然语言处理(NLP)是啥?

第一章&#xff1a;自然语言处理&#xff08;NLP&#xff09;是啥&#xff1f;一句话解释&#xff1a; NLP 教电脑听懂人话、说人话的技术 &#xff08;比如让手机听懂你说话、让翻译软件变聪明&#xff09;NLP发展史&#xff1a;电脑学人话的 “翻车史” 第一阶段&#xff08…

微软发布五大AI Agent设计模式 推动企业自动化革新

今日&#xff0c;微软在官网正式公布了企业级AI智能体&#xff08;Agent&#xff09;的五大核心设计模式&#xff0c;旨在通过模块化架构与自适应能力&#xff0c;帮助企业构建具备推理、协作与自主进化能力的"数字员工团队"。这一技术框架突破传统RPA&#xff08;机…

如何根据本地是有GPU安装对应CUDA版本的PyTorch

要在本地安装与您的NVIDIA GPU匹配的CUDA版本PyTorch&#xff0c;请按以下步骤操作&#xff1a; 步骤1&#xff1a;确定GPU型号和驱动信息 1.按 Win X选择 ​设备管理器​2.展开 ​显示适配器​ → 记录您的NVIDIA显卡型号&#xff08;如RTX 3060&#xff09;3.打开命令提示…

在FP32输入上计算前向传播需要多长时间?FP16模型的实例与之前的模型相比,它快了多少?

下面的 MixedModel 类使用作为参数提供的数据类型创建了一个非常简单的两层模型: class MixedModel(nn.Module): def init (self, dtype): super(). init

嵌入式硬件中MOS管图形详解

第一:MOS管电子元器件分析 MOS管全称叫金属氧化物半导体场效应晶体管,是一种压控器件。 MOS管属于场效应晶体管。 1、进入饱和区,若想加大电流该怎么做? 答:增加栅极电压,以扩大沟道宽度,此时到沟道再次被夹断所通过的电流也会增大。 2、MOS管的特性 答:(1)MOS管…

介绍java中atomic及相关类

文章目录一、Atomic 类的核心原理二、常见 Atomic 类及用法1. 基本类型原子类&#xff08;1&#xff09;AtomicInteger&#xff08;原子更新 int&#xff09;&#xff08;2&#xff09;AtomicLong&#xff08;原子更新 long&#xff09;&#xff08;3&#xff09;AtomicBoolean…

消费级显卡分布式智能体协同:构建高性价比医疗AI互动智能体的理论与实践路径

摘要: 本文系统探讨了基于消费级显卡集群(NVIDIA 30/40系列)的分布式小模型(1.5B-7B)协同机制,构建医疗互动智能网的理论基础与实践路径。文章从医疗AI的特殊性出发,提出“异构智能体协同计算”范式,通过模型分片、动态任务调度、联邦学习等核心技术,解决医疗场景中数…