news 2026/6/9 23:29:13

【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/6/6 16:58:08

golang中使用 sort.Interface 实现复杂多级排序

举两个例子&#xff0c;说明 sort.Interface实现多级排序。 例子 1 学生成绩排序&#xff08;先按成绩降序&#xff0c;成绩相同按姓名升序&#xff09;package mainimport ("fmt""sort")type Student struct {Name stringScore int}type ByScoreAndName …

作者头像 李华
网站建设 2026/6/6 14:05:27

【超详细】大模型学习路线图,从入门到应用(建议收藏)

本文为非从业者提供了一条大模型学习的快速入门路径&#xff0c;强调入门难度不高且投入不大。文章从神经网络基础开始&#xff0c;逐步介绍CNN、RNN、Transformer结构&#xff0c;再到大模型原理、训练优化、部署应用等&#xff0c;最后涵盖GPU算力知识。作者建议采用工程师式…

作者头像 李华
网站建设 2026/6/6 17:43:10

GLM-ASR-Nano-2512:中文方言识别与低音量语音处理的最佳开源方案

GLM-ASR-Nano-2512是智谱Z.AI开源的1.5B参数语音识别模型&#xff0c;专注于中文方言识别和低音量语音处理&#xff0c;性能超越Whisper。支持粤语等多种方言&#xff0c;能识别低音量语音&#xff0c;错误率仅4.10%。适合企业会议转写、客服中心等场景&#xff0c;支持本地部署…

作者头像 李华
网站建设 2026/6/6 16:43:24

智能摄像头在智能车道路视频采集中的关键技术及应用解析

摄像头在智能车道路视频采集中的应用&#xff0c;主要依赖于其高精度图像捕捉、多角度采集、实时处理与传输以及智能分析等能力&#xff0c;以下是对其关键环节及技术要点的详细分析&#xff1a;一、摄像头在智能车道路视频采集中的核心作用高精度图像捕捉 &#xff1a;摄像头作…

作者头像 李华
网站建设 2026/6/6 21:56:57

学霸同款2026 AI论文写作软件TOP9:研究生开题报告必备测评

学霸同款2026 AI论文写作软件TOP9&#xff1a;研究生开题报告必备测评 2026年学术写作工具测评&#xff1a;为何需要这份榜单&#xff1f; 随着人工智能技术的不断进步&#xff0c;AI论文写作软件已成为研究生群体提升科研效率的重要工具。然而&#xff0c;市场上产品繁多&…

作者头像 李华