基本数据类型判断相等只能用==,因其直接存储值,==比较栈中数值;不能用equals()因基本类型非对象;浮点数需用阈值或Float/Double.compare避免精度问题。

Java 基本数据类型判断是否相等,直接用 == 运算符就行,这是唯一且正确的方式。
为什么只能用 ==?
基本数据类型(byte、short、int、long、float、double、char、boolean)在内存中直接存储值,不涉及对象引用。== 比较的就是它们在栈中实际保存的数值或状态,语义清晰、无歧义。
- int a = 100, b = 100;a == b → true
- char c = 'A', d = 65;c == d → true('A' 的 Unicode 值就是 65)
- boolean x = true, y = false;x == y → false
不能用 equals() 的原因
基本类型不是对象,没有方法,也不属于任何类。试图写 a.equals(b) 会编译失败——JVM 根本不认这种语法。
- 包装类(如 Integer、Double)才有 equals(),但那是另一套逻辑
- 基本类型和其包装类混用时要注意自动装箱/拆箱带来的陷阱(比如 Integer 在 -128~127 范围内可能缓存对象)
浮点数比较要特别小心
float 和 double 是近似存储,直接用 == 判断相等容易出错,尤其涉及计算后:
立即学习“Java免费学习笔记(深入)”;
- 0.1 + 0.2 == 0.3 → 结果是 false(二进制浮点精度问题)
- 推荐做法:用差值绝对值小于某个极小阈值(如 1e-6)来判断“逻辑相等”
- 也可用 Float.compare(a, b) == 0 或 Double.compare(a, b) == 0,它们按 IEEE 754 规则安全比较


















