java数字如何相等
比较基本数据类型(如int、double等)
对于基本数据类型(如int, double, float等),可以直接使用==运算符进行比较。这种比较是基于值的。
int a = 5;
int b = 5;
boolean isEqual = (a == b); // true
对于浮点数(float和double),由于精度问题,建议使用误差范围比较:
double x = 0.1 + 0.2;
double y = 0.3;
boolean isEqual = Math.abs(x - y) < 1e-10; // 比较是否在误差范围内
比较包装类对象(如Integer、Double等)
对于包装类对象(如Integer, Double等),使用==比较的是引用而非值。应该使用equals()方法或拆箱后比较。
Integer num1 = new Integer(5);
Integer num2 = new Integer(5);
boolean isRefEqual = (num1 == num2); // false,比较引用
boolean isValueEqual = num1.equals(num2); // true,比较值
对于自动装箱的情况,缓存范围内的值(如Integer在-128到127之间)可能用==比较为true:
Integer a = 127;
Integer b = 127;
boolean isCachedEqual = (a == b); // true,因为使用缓存
比较BigDecimal对象
对于高精度的BigDecimal,必须使用compareTo()方法或equals()方法:
BigDecimal d1 = new BigDecimal("0.1");
BigDecimal d2 = new BigDecimal("0.10");
boolean isEqualCompare = (d1.compareTo(d2) == 0); // 0表示相等
boolean isEqualEquals = d1.equals(d2); // false,因为精度不同
比较字符串
字符串虽然是对象,但因其不可变性,可以直接用equals()方法比较内容:
String s1 = "hello";
String s2 = new String("hello");
boolean isRefEqual = (s1 == s2); // false
boolean isContentEqual = s1.equals(s2); // true
比较自定义对象
对于自定义类,需要重写equals()和hashCode()方法以实现正确的值比较:
class Person {
private String name;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name);
}
}
使用Objects.equals()工具方法
Java 7+提供了Objects.equals()静态方法,可以安全地处理null值比较:

String str1 = null;
String str2 = "test";
boolean isEqual = Objects.equals(str1, str2); // false






