【Java 新手必看】比较运算符:从概念到实战,附可运行代码案例

比较运算符是 Java 中用于判断 “两个值 / 变量关系” 的核心运算符,也是实现程序逻辑判断(如 if/else)的基础。新手常混淆 “等于” 和 “赋值”、“等于” 和 “对象相等”,这篇笔记结合可直接运行的代码案例,从基础用法到避坑指南,帮你彻底掌握 Java 比较运算符。

一、什么是 Java 比较运算符?

比较运算符也叫 “关系运算符”,用于比较两个操作数的大小、是否相等,运算结果永远是布尔类型(true/false)—— 满足条件返回 true,不满足返回 false。

根据功能可分为两类:

  • 相等性判断==(等于)、!=(不等于)
  • 大小关系判断>(大于)、<(小于)、>=(大于等于)、<=(小于等于)

二、比较运算符的完整用法(附可运行案例)

1. 核心语法与对照表

运算符名称语法结果适用场景
==等于a == btrue/false所有基本类型 + 引用类型
!=不等于a != btrue/false所有基本类型 + 引用类型
>大于a > btrue/false数值类型(byte/short/int 等)
<小于a < btrue/false数值类型
>=大于等于a >= btrue/false数值类型
<=小于等于a <= btrue/false数值类型

2. 基础数值比较(可直接运行)

// 文件名:BasicCompareDemo.java(类名与文件名一致) public class BasicCompareDemo { public static void main(String[] args) { // 初始化测试变量 int a = 10; int b = 20; double c = 10.0; // 1. 相等性判断 System.out.println("a == b:" + (a == b)); // 输出:false(10≠20) System.out.println("a == c:" + (a == c)); // 输出:true(10和10.0数值相等) System.out.println("a != b:" + (a != b)); // 输出:true(10≠20) // 2. 大小关系判断 System.out.println("a > b:" + (a > b)); // 输出:false System.out.println("a < b:" + (a < b)); // 输出:true System.out.println("b >= a:" + (b >= a)); // 输出:true System.out.println("a <= c:" + (a <= c)); // 输出:true // 3. 实际应用:结合if判断 int score = 85; if (score >= 60) { System.out.println("考试及格"); // 输出:考试及格 } else { System.out.println("考试不及格"); } } }

3. 运行步骤与结果

  1. 新建BasicCompareDemo.java文件,粘贴上述代码;
  2. 命令行执行编译:javac BasicCompareDemo.java
  3. 执行运行:java BasicCompareDemo
  4. 输出结果:

plaintext

a == b:false a == c:true a != b:true a > b:false a < b:true b >= a:true a <= c:true 考试及格

三、重点难点:==的两种核心用法

==是新手最容易踩坑的运算符,需区分基本类型引用类型的不同判断逻辑:

1. 基本类型:判断 “值是否相等”

对于 int、double、char 等基本类型,==直接比较变量存储的 “实际值”,这也是新手最常用的场景。

示例:

char ch1 = 'A'; char ch2 = 'A'; System.out.println(ch1 == ch2); // 输出:true(值相等) double num1 = 3.14; double num2 = 3.14000; System.out.println(num1 == num2); // 输出:true(值相等)

2. 引用类型:判断 “地址是否相等”

对于 String、数组、自定义类等引用类型,==比较的是对象在内存中的地址(是否为同一个对象),而非对象的内容。

可运行案例(String 类型对比):
// 文件名:ReferenceCompareDemo.java public class ReferenceCompareDemo { public static void main(String[] args) { // 场景1:字符串常量池(直接赋值) String s1 = "Java"; String s2 = "Java"; System.out.println("s1 == s2:" + (s1 == s2)); // 输出:true(地址相同) // 场景2:new创建新对象 String s3 = new String("Java"); String s4 = new String("Java"); System.out.println("s3 == s4:" + (s3 == s4)); // 输出:false(地址不同) // 正确判断字符串内容相等:用equals()方法 System.out.println("s3.equals(s4):" + s3.equals(s4)); // 输出:true(内容相同) // 场景3:自定义类对比 Student stu1 = new Student("张三", 20); Student stu2 = new Student("张三", 20); System.out.println("stu1 == stu2:" + (stu1 == stu2)); // 输出:false(地址不同) } } // 自定义学生类 class Student { String name; int age; public Student(String name, int age) { this.name = name; this.age = age; } }
运行结果:

plaintext

s1 == s2:true s3 == s4:false s3.equals(s4):true stu1 == stu2:false
核心结论:
  • 基本类型比较值 → 用==
  • 引用类型比较内容 → 用equals()方法(如 String、自定义类);
  • 引用类型比较是否为同一个对象 → 用==(极少用)。

四、比较运算符的优先级

比较运算符的优先级低于算术运算符,高于赋值运算符,因此程序会先计算算术表达式,再进行比较。

示例验证:

// 文件名:PriorityDemo.java public class PriorityDemo { public static void main(String[] args) { int x = 5; int y = 2; // 先算x + y = 7,再算7 > 6 → true boolean result1 = x + y > 6; System.out.println("x + y > 6:" + result1); // 输出:true // 先算y * 3 = 6,再算x <= 6 → true boolean result2 = x <= y * 3; System.out.println("x <= y * 3:" + result2); // 输出:true // 复合表达式:结合括号改变优先级 boolean result3 = (x + y) * 2 > 15; // 先算(x+y)=7,再算7*2=14,最后14>15→false System.out.println("(x + y) * 2 > 15:" + result3); // 输出:false } }

五、新手常见错误汇总

1. 混淆===

int num = 10; // 错误:把赋值=当成比较==,if条件需要布尔值,此处是赋值操作(num=5是int类型) if (num = 5) { System.out.println("num等于5"); }

修正:if (num == 5)

2. 用==比较字符串 / 对象内容

String str1 = new String("Hello"); String str2 = new String("Hello"); if (str1 == str2) { // 错误:比较地址而非内容 System.out.println("内容相等"); }

修正:if (str1.equals(str2))

3. 比较不同类型的数值(自动类型转换)

short s = 10; int i = 10; System.out.println(s == i); // 正确:short自动转int,比较值→true double d = 10.0; System.out.println(i == d); // 正确:int自动转double,比较值→true

⚠️ 注意:boolean 类型不能和任何类型比较(编译报错):

boolean flag = true; // System.out.println(flag == 1); // 编译报错:不兼容的类型

4. 浮点数的精确比较问题

浮点数(float/double)存在精度丢失,不能直接用==判断是否相等:

double m = 0.1 + 0.2; double n = 0.3; System.out.println(m == n); // 输出:false(0.1+0.2=0.30000000000000004)

解决方案:比较差值的绝对值是否小于极小值(如 1e-9):

boolean isEqual = Math.abs(m - n) < 1e-9; System.out.println(isEqual); // 输出:true

总结

  1. 比较运算符的结果是布尔值(true/false),分为相等性判断(==/!=)和大小判断(>/</>=/<=);
  2. ==对基本类型比较 “值”,对引用类型比较 “内存地址”,引用类型比较内容需用equals()
  3. 新手避坑重点:区分=(赋值)和==(比较)、浮点数避免直接用==比较、字符串内容比较用equals()

所有案例均可直接复制运行,建议新手亲手敲一遍,重点体会==在基本类型和引用类型中的不同表现,这是 Java 面试和开发中的高频考点!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1215758.shtml

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

相关文章

网络考试点下一步出错怎么办?试试这样做

场景&#xff1a;家中网络课学习完毕考试&#xff0c;遇到点下一步出错问题 解决方案&#xff1a;打开显示所有题号的面板&#xff0c;点击面板上的题号跳转 注&#xff1a;我这里题号面板是点击进度条打开的&#xff0c;各人根据实际情况找下

【保姆级教程】移动端部署本地知识库与大模型,小白也能轻松上手(建议收藏)

本文详细介绍了在移动端部署本地知识库与大模型的完整方案&#xff0c;包括轻量级模型选型&#xff08;如Phi-2、TinyLlama&#xff09;、推理引擎&#xff08;llama.cpp、MLC LLM&#xff09;和知识库构建方法&#xff08;向量数据库或关键词匹配&#xff09;。提供了Android部…

大模型学习宝典:收藏这份系统性技术框架,从零开始构建LLM

本文基于Stanford CS336课程&#xff0c;系统介绍大模型开发关键技术&#xff0c;涵盖BPE分词、网络结构设计、超参数选择、训练技巧、MoE架构、GPU优化、分布式训练及推理优化等核心内容。详细解析从LayerNorm到RMSNorm、RoPE位置编码、Flash Attention等实现方法&#xff0c;…

STM32F0实战:基于HAL库开发【2.1】

7.4.2 从待机模式唤醒 待机模式允许达到能耗最低,它基于Cortex-M0深度睡眠模式,电压调节器禁用,1.8V域关闭,PLL、HIS和HSE振荡器也关闭,SRAM和寄存器内容丢失。只有RTC寄存器、RTC备份寄存器和备用电路保持工作。可以使用HAL库中的HAL_PWR_EnterSTANDBYMode()函数进入待机…

大语言模型训练原理解析:ChatGPT背后的技术原理与应用价值

大语言模型训练分为三步&#xff1a;预训练阶段通过互联网数据训练基础预测模型&#xff1b;监督微调阶段通过问答数据让模型学会回答问题&#xff1b;强化学习阶段让模型自行探索最佳解法&#xff0c;产生思维链。大模型本质是统计学预测器&#xff0c;通过预测下一个token生成…

MCP与A2A深度解析:AI系统集成与智能体协作的未来之路

MCP与A2A是AI系统集成的两大关键协议。MCP解决AI安全调用工具与数据的问题&#xff0c;提供资源、工具和提示模板三大能力&#xff1b;A2A则规范智能体间的协作&#xff0c;通过任务、消息和产物等组件实现高效接力。它们共同构成AI系统的分层规范&#xff0c;将开发范式从&quo…

【升级版本】基于多目标粒子群算法的微电网优化调度【风光、储能、柴油、燃气、电网交互】附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真…

【实时无功-有功控制器的动态性能】【带有电流控制的两级电压源变流器(VSC)】采用αβ阿尔法-贝塔转换进行电流反馈的实时无功功率控制器附Simulink仿真

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真…

【2026最新】大模型面试全攻略:23家科技公司面试经验+高频考点总结,助你轻松上岸

本文详细记录了作者对23家大模型相关公司的面试经历&#xff0c;包括智元机器人、面壁科技、Minimax、阿里夸克、蚂蚁等公司的面试流程与结果。作者总结了大模型面试的高频考点&#xff0c;如多头注意力机制、框架并行方式、BERT/GPT模型细节、大模型训练技巧等&#xff0c;并分…

【使用Copulas对金融时间序列进行波动率估计与预测,涵盖GARCH、EWMA和EqWMA等模型】基于件风险价值(CVaR)、极值理论(EVT)、风险因子及蒙特卡洛模拟进行市场风险管理附Matlab

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真…

个人AI产业定义、产业架构与发展趋势白皮书|附60页PDF文件下载

本报告以用户为中心&#xff0c;立足于产业与生态&#xff0c;系统阐述个人AI时代来临的产业逻辑与必然趋势&#xff0c;厘清个人AI的基础架构与核心特征&#xff0c;剖析其对产业链、价值链及竞争格局带来的结构性变革。报告亦将对个人AI主导的未来生态进行前瞻展望&#xff0…

企业AI开发与技术实践白皮书2025|附36页PDF文件下载

白皮书探讨了在GenAI时代&#xff0c;企业如何利用大模型技术实现智能化转型。白皮书指出&#xff0c;大模型能力的不断提升为企业带来了无限想象力&#xff0c;但也面临着战略规划、数据治理、算力资源、场景适配等方面的挑战。企业需要构建覆盖顶层设计、技术选型、数据治理、…

【数据驱动】【航空航天结构的高效损伤检测技术】一种数据驱动的结构健康监测(SHM)方法,用于进行原位评估结构健康状态,即损伤位置和程度,在其中利用了选定位置的引导式兰姆波响应附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真咨询…

【柔性作业车间调度问题FJSP】基于鹅优化算法(GOOSE Algorithm,GOOSE)求解柔性作业车间调度问题(FJSP)研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真…

如何保证服务高可靠? - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

P1462 通往奥格瑞玛的道路

点击查看代码 #include<bits/stdc++.h> using namespace std;typedef long long LL; typedef pair<LL,int> PII; const int N=1e4+10,M=1e5+10;int h[N],ne[M],idx,e[M],w[M]; int n,m; LL b; LL f[N]; LL…

Codeforces Round 1073 Div.1 写题记录(编号 2190)

A 显然有序 Bob 赢,那么无序的情况就是选出一个不升子序列变成不降子序列,考虑一定有这么一个分界点,是的前面全部取 \(1\),后面全部取 \(0\),看一下合不合法即可,当然有一种更简单的构造方式是排完序后比对哪些…

动态系统思维:告别僵化内耗的破局指南

职场中总有这样的困惑&#xff1a;公司制定了标准化流程&#xff0c;却越执行越低效&#xff1b;团队追求“绝对有序”&#xff0c;反而失去创新活力&#xff1b;个人埋头重复固有工作&#xff0c;却在变化中逐渐被淘汰。我们总以为“稳定有序”是生存之道&#xff0c;却忽略了…

Vue 1.26

一、指令补充 1.指令修饰符 &#xff08;1&#xff09;按键修饰符 keyup.enter → 键盘回车监听 <body><div id"app"><h3>keyup.enter > 监听键盘回车事件</h3><input keyup.enter"fn" v-model"username" type&…

一站式指南:Obsidian Typora 统一写作规范与存量内容迁移实战

一站式指南:Obsidian & Typora 统一写作规范与存量内容迁移实战 引言 在内容创作领域,选择合适的写作工具和遵循统一的规范是提升效率和保证质量的关键。然而,许多创作者在使用 Obsidian 和 Typora 进行 Markdo…