news 2026/4/28 21:26:12

【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/4/24 18:33:40

学习周报三十二

摘要 本周聚焦于强化学习探索优化与多模态生成模型的技术细节。深入研究论文《Rewarding the Rare》&#xff0c;其针对强化学习后训练中出现的“探索坍缩”问题&#xff0c;提出基于策略层面唯一性的奖励机制&#xff0c;通过聚类分组对稀缺解题思路进行加权奖励&#xff0c;以…

作者头像 李华
网站建设 2026/4/18 8:07:10

MySQL 中的 utf8 vs utf8mb4 区别

目录核心区别详细对比1. **编码范围不同**2. **历史背景**3. **实际影响最明显的场景**4. **存储空间差异**5. **性能差异**关键限制**索引长度限制**实际使用建议1. **新项目一律使用utf8mb4**2. **现有系统迁移步骤**3. **连接配置**4. **排序规则选择**兼容性考虑**向下兼容…

作者头像 李华
网站建设 2026/4/25 12:48:13

本地运行!开源AI音乐生成器HeartMuLa完整安装与使用指南

HeartMuLa是一个开源的本地离线AI音乐生成器&#xff0c;包含音乐语言模型、编解码器、歌词转录模型和音频-文本对齐模型。支持多语言输入歌词和标签生成完整音乐&#xff0c;无需依赖云端&#xff0c;不限使用次数。文章提供了详细的环境准备、本地部署、命令行和ComfyUI可视化…

作者头像 李华