测试对象的等价性(== 与 equals)

在阐述==与equals的区别之前,我们先来看一段代码:

package com.hjp.test;

/**
 * 测试对象的等价性( == 与 equals)
 * @ClassName: Equivalence 
 * @author: huangjp
 * @date: 2017年3月7日 下午4:15:07
 */
public class Equivalence {

    public static void main(String[] args) {
        Integer n1 = new Integer(47);
        Integer n2 = new Integer(47);
        System.out.println(n1 == n2);   
    }
}

猜一猜输出的结果是什么?以下是输出的结果:

false

小伙伴一定很困惑,明明这两个对象的内容是一模一样的,为什么结果是不相等的呢?事实上,== 比较的是对象的引用,n1与n2是两个引用,所以它们是不相等的。那么,当我们只想比较两个对象的内容时,该如何操作呢?

此时,必须使用equals()方法,下面举例说明如何使用:

package com.hjp.test;

/**
 * 测试对象的等价性(== 与 equals)
 * @ClassName: Equivalence 
 * @author: huangjp
 * @date: 2017年3月7日 下午4:15:07
 */
public class Equivalence {

    public static void main(String[] args) {
        Integer n1 = new Integer(47);
        Integer n2 = new Integer(47);
        System.out.println(n1.equals(n2));
    }
}/* Output:
    true
    *///~

需要注意的是,equals()这个方法并不是适用于基本类型,基本类型直接使用==和!=即可。

然而,这还没完,假设你创建了自己的类,并使用equals()方法进行比较对象的内容,就像下面这样:

package com.hjp.test;

/**
 * 测试对象的等价性(== 与 equals)
 * @ClassName: Equivalence 
 * @author: huangjp
 * @date: 2017年3月7日 下午4:15:07
 */
public class Equivalence {

    public static void main(String[] args) {

        equalsMethod();

    }/* Output:
        false
        *///~

    public static  void equalsMethod(){

        Value v1 = new Value();
        Value v2 = new Value();

        v1.i = v2.i = 100;

        System.out.println(v1.equals(v2));  //output:false

    }


    static class Value{
        int i;
    }
}

答案又是false,为什么呢?明明v1与v2的内容是一样的。这是由于equals()的默认行为是比较对象的引用。所以除非在自己的新类中覆盖equals()方法,否则不可能表现出我们希望的行为。(String类就是一个例子)

幸运的是,大多数Java类库都实现了equals()方法,以便用来比较对象的内容,而非比较对象的引用。

本文就阐述到这里,感兴趣的小伙伴可以加入我们的QQ群:372702757,欢迎大家来讨论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值