第4章 运算符与表达式
第4章 运算符与表达式数据定义好之后就要对数据进行运算。本节系统学习 Java 的各类运算符算术、赋值、比较、逻辑、三元等。一、算术运算符运算符说明示例结果加7 310-减7 - 34*乘7 * 321/除7 / 32整数相除取整%取余7 % 31System.out.println(7/3);// 2整数除法直接丢弃小数System.out.println(7.0/3);// 2.3333333333333335有小数参与就是浮点除法System.out.println(7%3);// 17 3*2 1为什么7 / 3是 2因为 int 类型装不下小数Java 规定整数 ÷ 整数结果仍是整数小数部分直接丢弃不是四舍五入3.99 也会变成 3。要保留小数至少让一边变成浮点数。另外整数除以 0 会抛ArithmeticException浮点除以 0 得Infinity注意分母别为 0。// 取余 % 的经典应用判断奇偶、拆数字System.out.println(123%2);// 1奇数System.out.println(123%10);// 3个位数字System.out.println(123/10%10);// 2十位数字自增自减运算符inta10;a;// a 11自增a--;// a 10自减intb10;intcb;// c 10先取值再自增后缀b 变成 11intdb;// d 12先自增再取值前缀b 变成 12口诀前缀 先用后加后缀 先加后用站在使用者的角度看。为什么要有因为i i 1在循环里写得太啰嗦i一行搞定。单独成行时前缀和后缀结果完全一样只有混进表达式里才有区别见扩展知识与易错点。二、赋值运算符是赋值不是数学中的等号intx5;x3;// x x 3 8x-2;// x 8 - 2 6x*4;// x 24x/6;// x 4x%3;// x 1复合赋值运算符、-、*、/、%能让代码更简洁且自带隐式强转// 复合赋值自带隐式强转byte 也能直接做运算byteb10;b5;// 编译通过等价于 b (byte)(b 5)// b b 5; // 编译报错b 5 是 int不能直接赋给 byte三、比较运算符结果永远是布尔值true/false运算符说明示例结果相等5 5true!不等5 ! 5false大于5 3true小于5 3false大于等于5 5true小于等于3 5true// 比较结果可以直接存进 boolean后面给 if 用booleanflag53;// trueSystem.out.println(flag);System.out.println(A65);// trueA 的 Unicode 编号就是 65注意基本类型用比较值String 等引用类型用比较的是地址比较内容要用equals()方法后面字符串章节会重点讲。四、逻辑运算符用于连接多个布尔表达式运算符说明示例短路与两边都为 true 才为 truea 0 b 0||短路或一边为 true 即为 truea 0 || b 0!非取反!true→ falseintage20;booleanisAdultage18;// truebooleancanDriveisAdultage70;// true满足两个条件booleanisKid!isAdult;// false短路特性重要左边为 false 时右边不再执行||左边为 true 时右边不再执行intx10;booleanr(x100)(x0);// 右边不执行x 仍是 10这个特性常用于避免空指针name ! null name.length() 0就是最经典的写法具体实战放到扩展知识里演示。五、三元运算符格式条件 ? 值1 : 值2intscore85;Stringresultscore60?及格:不及格;System.out.println(result);// 及格它是 if-else 的简写但表达式必须有返回值。可以嵌套但超过两层可读性很差不建议。求最大值这类二选一取值用三元最顺手int max a b ? a : b;六、运算符优先级从高到低常用顺序括号()自增自减 --乘除余* / %加减 -比较 相等 !逻辑与逻辑或||赋值 - ...建议不确定优先级时就用括号代码可读性比省几个括号重要得多。intresult(12)*(34)-5/2;// 3 * 7 - 2 19七、字符串拼接遇到字符串时是拼接操作Stringname张三;intage25;System.out.println(姓名name年龄age);// 姓名张三年龄25任何类型与字符串相加都会先转成字符串再拼接。后面字符串章节会讲为什么循环中拼接字符串性能差StringBuilder 的由来。// 任何类型遇到 字符串 都先转成字符串拼接方向从左往右System.out.println(结果是(12));// 结果是3括号里先算加法System.out.println(结果是12);// 结果是12直接拼接八、扩展知识1. 位运算入门 | ^ 面试常考、底层代码常用。注意区分、||是逻辑运算结果只有 true/false、|是位运算直接操作二进制位。运算符名称规则示例按位与两位都是 1 结果才是 16 3 2|按位或有一位是 1 结果就是 16 | 3 7^按位异或两位不同为 1相同为 06 ^ 3 5左移整体左移低位补 06 1 12右移整体右移高位补符号位6 1 3// 移位左移一位 乘 2右移一位 整除 2System.out.println(61);// 12System.out.println(61);// 3// 应用 1 判断奇偶n (n-1) 0 判断 2 的幂System.out.println((71)0?偶数:奇数);// 奇数System.out.println(160(1615)0);// true16 2^42. 短路求值的判空应用短路特性在判空 用值组合里几乎是标配写法// 配合三元做兜底显示配置或输入可能是 nullStringsgetInput();// 假设这个方法可能返回 nullStringshow(s!null!s.isEmpty())?s:空;System.out.println(show);// 空null 被安全兜底3. 自增自减的底层原理一句话概括i是先把 i 的当前值作为表达式结果再自增i是先自增再把新值作为表达式结果。// 后缀拿到的是自增前的值前缀拿到的是自增后的新值inta5;intbaa;// 第一次取 5a 变 6第二次取 6a 变 7 → 5 6 11intx5;intyxx;// 先变 6再变 7 → 6 7 13System.out.println(b y);// 11 13这种先后顺序在 JVM 底层对应专门的字节码指令。记住结论即可别把自增写进复杂表达式单独一行用谁都看得懂。九、易错点1. 整数除法直接取整// ❌ 想要 2.5却得到 2.05/2 先按 int 算出 2doubled15/2;System.out.println(d1);// 2.0// ✅ 至少一边是浮点数或显式强转doubled25/2.0;// 2.5doubled3(double)5/2;// 2.52. % 取余对负数的符号// ❌ 以为 -5 % 2 是 1实际是 -1符号跟随被除数System.out.println(-5%2);// -1System.out.println(5%-2);// 1// ✅ 需要非负余数时先对绝对值取余intrMath.abs(-5)%2;// 13. 用 比较浮点数// ❌ 0.1 0.2 实际是 0.30000000000000004和 0.3 永不相等doublea0.10.2;if(a0.3){// false里面永远不会执行System.out.println(相等);}// ✅ 用差值的绝对值小于一个极小值判断近似相等if(Math.abs(a-0.3)0.000001){System.out.println(近似相等);// 走这里}4. 记不住优先级却不用括号// ❌ 依赖记忆硬写隔几天自己都看不懂intr12*31;// (1 6) 1 3// ✅ 用括号把意图写清楚可读性优先intr2(12*3)1;// 3一眼看懂5. a 与 a 混用// ❌ 前缀后缀混进一个表达式结果全靠猜inti1;intjii;// 1 3 4i 变成 3// ✅ 自增自减单独成行前缀后缀完全等价行为清晰i1;i;i;System.out.println(i);// 3十、小结本系列统一按 JDK 8、JDK 11、JDK 17 三个 LTS 版本讲解。运算符这部分三个版本写法完全一致你用哪个版本练习都一样不用担心差异。整数除法取整、取余%用途广泛判断奇偶、取某位数字比较基本类型的值引用类型比较内容用equals、||有短路特性判空场景很好用三元是简单分支的语法糖嵌套别超过两层优先级记不住就用括号位运算是加分项业务代码别滥用自增自减单独成行使用下一节学习条件控制语句 if / switch。下一篇第5章 条件控制if / switch

相关新闻

2026电赛智能小车开发指南:从硬件选型到算法部署全流程解析

2026电赛智能小车开发指南:从硬件选型到算法部署全流程解析

这次我们来看一个面向2026年电赛的智能小车项目。对于电赛选手和嵌入式开发者来说,提前规划、技术选型和模块化验证至关重要。这个项目不是一个具体的成品,而是一套针对未来电赛(如2026年)小车题目的前瞻性技术框架与实现方案。它…

2026/10/21 0:19:54 阅读更多 →
一个数据分析项目改成 AI 流程后,最难的部分完全变了

一个数据分析项目改成 AI 流程后,最难的部分完全变了

聊《一个数据分析项目改成 AI 流程后,最难的部分完全变了》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要去年我带团队做了一个报表转智能分析的改造,本来以为最难的是接大模型API&…

2026/10/20 6:42:41 阅读更多 →
国产模型代码审查翻车:Cursor 误报率 37% 的秘密测试集

国产模型代码审查翻车:Cursor 误报率 37% 的秘密测试集

国产模型代码审查翻车:Cursor 误报率 37% 的秘密测试集 AI代码审查实战:如何平衡误报率与审查效率 为什么误报率如此重要:一个真实的案例 灰度发布的第3天,我盯着Jenkins上那片刺眼的红色陷入了沉思--团队引入Cursor做自动化代码审查后,PR驳回率从12%飙升到41%,但一半的"…

2026/10/20 8:56:18 阅读更多 →

最新新闻

用NocoBase 2.0低代码搭建智能工单系统的完整实践笔记

用NocoBase 2.0低代码搭建智能工单系统的完整实践笔记

我们部门的工单管理,很长一段时间其实是失控的。报修靠企业微信群里吼一声,登记靠一张在线表格,处理进度完全依赖个人的自觉。高峰期一天四十多个请求,谁在跟、跟到哪一步、有没有超时,根本说不清楚。我当时的想法很直…

2026/10/21 8:18:34 阅读更多 →
大模型面试必备:Transformer、Token与RAG核心概念精讲

大模型面试必备:Transformer、Token与RAG核心概念精讲

想进大模型赛道,先把LLM这些地基问题答明白这两年大语言模型(LLM)相关的岗位有多火,不用我多说。很多人简历上写“熟悉大模型应用”“做过Agent开发”,结果面试官随口问一句“你讲一下Transformer结构和传统序列模型的…

2026/10/21 8:18:34 阅读更多 →
分布式文件系统写入路径与元数据设计:从租约到副本一致性

分布式文件系统写入路径与元数据设计:从租约到副本一致性

简介:这是一份以 FastDHT 1.15 源码为核心的分布式文件系统学习与开发资料,面向需要理解分布式哈希表、高并发文件存储及 FastDHT 二次开发的开发者。包内含完整 C 源码骨架,覆盖服务端、客户端与 PHP 扩展三部分,配合配置与启动脚…

2026/10/21 8:18:34 阅读更多 →
Cookie注入攻击全解析:从原理到防御的实战指南

Cookie注入攻击全解析:从原理到防御的实战指南

1. 前言:为什么Cookie会成为攻击者的突破口在做Web安全测试时,很多人习惯性地只关注URL参数和表单提交的数据,却忽略了一个非常关键的输入点——Cookie。Cookie注入攻击的原理其实并不复杂,但它的隐蔽性极强,很多开发者…

2026/10/21 8:18:34 阅读更多 →
手写RSA算法:用Python从零实现非对称加密与数字签名

手写RSA算法:用Python从零实现非对称加密与数字签名

先说个普遍现象:很多人学了几年密码学,真问起RSA该怎么实现,第一反应是调库。cryptography库一行sign,一行verify,完事。但你要是问他公钥和私钥到底是怎么算出来的,为什么别人拿到公钥也没法解密&#xff…

2026/10/21 8:18:34 阅读更多 →
电商数据分析SQL面试真题解析:从连续登录到留存率的解题思路

电商数据分析SQL面试真题解析:从连续登录到留存率的解题思路

回顾前几个月集中准备数据分析岗位面试的经历,最有感触的其实是SQL这道坎。投过头部电商平台数据分析岗的都知道,笔试和一面基本就是SQL题专场,甚至到了二面三面,面试官还会临时抛一道现场写SQL的场景题。我前前后后刷了不下两百道…

2026/10/21 8:17:33 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/21 4:27:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →