Java中的equals();

对象都有equals()方法,是判断两个对象是否相等,是指向地址的比较。

并不是所有对象的equals()的方法是相同的,在一些类中对equals()进行了重写,例如String、Math。jdk1.7的String的equals()如下所示:

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String) anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                            return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
显然它是对内容比较,而不是地址的比较。所以在进行不同类型对象的比较时,应注意下通常比较的用法。

 1) 对象域,使用equals方法 。 
 2) 类型安全的枚举,使用equals或== 。 
 3) 可能为null的对象域 : 使用 == 和 equals 。 
 4) 数组域 : 使用 Arrays.equals 。 
 5) 除float和double外的原始数据类型 : 使用 == 。 
 6) float类型: 使用Float.foatToIntBits转换成int类型,然后使用==。  
 7) double类型: 使用Double.doubleToLongBit转换成long类型,然后使用==。


对于float double为什么不直接用==,本人修为尚浅,大家可以参考下这个博客:
http://blog.csdn.net/turkeyzhou/article/details/2755970



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java ,`equals()` 是一个用于比较两个对象是否相等的方法。该方法定义在 `Object` 类,因此所有 Java 类都可以使用该方法进行对象比较。默认情况下,`equals()` 方法会比较两个对象的内存地址,即判断它们是否是同一个对象。但是,有时我们需要比较对象的属性值是否相等,这时就需要重写 `equals()` 方法。 重写 `equals()` 方法需要遵循以下规则: 1. 自反性:对于任何非空引用值 `x`,`x.equals(x)` 应该返回 `true`。 2. 对称性:对于任何非空引用值 `x` 和 `y`,如果 `x.equals(y)` 返回 `true`,那么 `y.equals(x)` 也应该返回 `true`。 3. 传递性:对于任何非空引用值 `x`、`y` 和 `z`,如果 `x.equals(y)` 返回 `true`,并且 `y.equals(z)` 返回 `true`,那么 `x.equals(z)` 也应该返回 `true`。 4. 一致性:对于任何非空引用值 `x` 和 `y`,如果用于比较的属性值没有被修改,那么多次调用 `x.equals(y)` 应该返回相同的结果。 5. 非空性:对于任何非空引用值 `x`,`x.equals(null)` 应该返回 `false`。 下面是一个示例代码,演示了如何重写 `equals()` 方法: ```java public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public boolean equals(Object obj) { if (obj == this) { // 自反性 return true; } if (!(obj instanceof Person)) { // 类型检查 return false; } Person other = (Person) obj; return name.equals(other.name) && age == other.age; // 属性比较 } // 省略 getter 和 setter 方法 } ``` 在这个示例,我们重写了 `equals()` 方法,比较了 `Person` 类的两个属性值。在实际使用,我们应该根据具体的业务逻辑,选择比较哪些属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值