如何使用== 、!=和equals()来测试对象的等价性

在Java编程中,比较基本类型和对象的等价性时,需要正确使用==、!=和equals()。基本类型直接用==和!=,而对象比较时,基本类型的包装类和大多数类库中的类已实现equals(),比较内容而非引用。对于自定义类,需要覆盖equals()方法以实现所需内容比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在有些情况下我们很可能会要比较两个基本数值,两个对象是否等价的问题,这时我们就要用到区分== 、!=和equals()。

而如何区分== 、!=和equals()的用法还有如何运用它们来解决问题呢?

首先,在java中,两个基本类型的比较就直接用 == 和 !=即可。

如 int i = 1;

System.out.println( 1 == i);

答案肯定为 true;

而对于类的对象的比较问题则可以将类分为 基本类型的包装类(如Iterger等)、大多数java类库里的类 还有 自己定义的类这两种情况。

第一种:基本类型的包装类(如Iterger等)、大多数java类库里的类:

它们的equals()都已经实现了,比较的都是对象的内容而非比较对象的引用。

而它们的 == 与 != 都是比较对象的引用。

如 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) );

}

}

答案为

true.


如 public class Equivalence{

public static void main(String[] args){

    Integer  n1 = new Integer(47);

Integer  n2 = new Integer(47);

System.out.println( n1 == n2);

System.out.println( n1 != n2);

}

}

答案先后为 false;

true.


第二种:自己定义的类

因为自己定义的类没有实现equals()方法,所以我们需要根据自己的情况,对类的equals()进行方法的覆盖,否则它将默认是比较引用。 

而它的 == 与 != 都是比较对象的引用。

``` @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Address)) return false; Address address1 = (Address) o; if (getAid() != null ? !getAid().equals(address1.getAid()) : address1.getAid() != null) return false; if (getUid() != null ? !getUid().equals(address1.getUid()) : address1.getUid() != null) return false; if (getName() != null ? !getName().equals(address1.getName()) : address1.getName() != null) return false; if (getProvinceName() != null ? !getProvinceName().equals(address1.getProvinceName()) : address1.getProvinceName() != null) return false; if (getProvinceCode() != null ? !getProvinceCode().equals(address1.getProvinceCode()) : address1.getProvinceCode() != null) return false; if (getCityName() != null ? !getCityName().equals(address1.getCityName()) : address1.getCityName() != null) return false; if (getCityCode() != null ? !getCityCode().equals(address1.getCityCode()) : address1.getCityCode() != null) return false; if (getAreaName() != null ? !getAreaName().equals(address1.getAreaName()) : address1.getAreaName() != null) return false; if (getAreaCode() != null ? !getAreaCode().equals(address1.getAreaCode()) : address1.getAreaCode() != null) return false; if (getZip() != null ? !getZip().equals(address1.getZip()) : address1.getZip() != null) return false; if (getAddress() != null ? !getAddress().equals(address1.getAddress()) : address1.getAddress() != null) return false; if (getPhone() != null ? !getPhone().equals(address1.getPhone()) : address1.getPhone() != null) return false; if (getTel() != null ? !getTel().equals(address1.getTel()) : address1.getTel() != null) return false; if (getTag() != null ? !getTag().equals(address1.getTag()) : address1.getTag() != null) return false; return getIsDefault() != null ? getIsDefault().equals(address1.getIsDefault()) : address1.getIsDefault() == null; } @Override public int hashCode() { int result = getAid() != null ? getAid().hashCode() : 0; result = 31 * result + (getUid() != null ? getUid().hashCode() : 0); result = 31 * result + (getName() != null ? getName().hashCode() : 0); result = 31 * result + (getProvinceName() != null ? getProvinceName().hashCode() : 0); result = 31 * result + (getProvinceCode() != null ? getProvinceCode().hashCode() : 0); result = 31 * result + (getCityName() != null ? getCityName().hashCode() : 0); result = 31 * result + (getCityCode() != null ? getCityCode().hashCode() : 0); result = 31 * result + (getAreaName() != null ? getAreaName().hashCode() : 0); result = 31 * result + (getAreaCode() != null ? getAreaCode().hashCode() : 0); result = 31 * result + (getZip() != null ? getZip().hashCode() : 0); result = 31 * result + (getAddress() != null ? getAddress().hashCode() : 0); result = 31 * result + (getPhone() != null ? getPhone().hashCode() : 0); result = 31 * result + (getTel() != null ? getTel().hashCode() : 0); result = 31 * result + (getTag() != null ? getTag().hashCode() : 0); result = 31 * result + (getIsDefault() != null ? getIsDefault().hashCode() : 0); return result; }```equals()and hashCode,为什么我创建的时候这个不一样
最新发布
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值