news 2026/8/28 21:58:51

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【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 面试和开发中的高频考点!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/29 4:04:45

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

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

作者头像 李华
网站建设 2026/8/21 14:07:11

什么病毒会导致人全身没力气、胃口不好,还有拉肚子?

多种病毒感染都可能引发全身乏力、食欲不振、腹泻的症状,其中最常见的是诺如病毒和轮状病毒,此外新冠病毒、腺病毒等也可能出现这类表现。 🦠 常见相关病毒及特点 1. 诺如病毒 • 典型症状:突发腹泻、呕吐,伴随全身乏力、食欲减退,还可能有腹痛、低热 • 传播性强:可…

作者头像 李华
网站建设 2026/8/26 10:52:20

如何系统化的学习金融,投资,理财?

系统化学习金融、投资、理财&#xff0c;需要遵循 “搭建知识框架→夯实理论基础→实践验证迭代→优化思维体系” 的逻辑路径&#xff0c;三者环环相扣&#xff0c;缺一不可。以下是分阶段的详细学习方案&#xff0c;兼顾理论深度与实操性&#xff1a;一、 第一阶段&#xff1a…

作者头像 李华
网站建设 2026/8/29 8:57:15

传统ChatBot四大瓶颈与AgenticRAG完整认知闭环:工业级开发实践

传统ChatBot因架构认知局限难以实现生产级可靠性。AgenticRAG通过理解推理验证实现完整认知闭环&#xff0c;Agent作为AI应用层操作系统决定应用可靠性与复杂度上限。深蓝学院开设工业级RAG系统与Agent应用开发实战课程&#xff0c;由商汤科技专家授课&#xff0c;帮助学员从Pr…

作者头像 李华
网站建设 2026/8/21 14:07:27

【柔性作业车间调度问题FJSP】基于部落竞争与成员合作算法CTCM求解柔性作业车间调度问题(FJSP)研究附Matlab代码

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

作者头像 李华