关于"=="与equals中的误区

经常听到不少人说,在基础面试中,会被问及“关于'=='与equals中的区别”

而不少人都是回答:"关于‘==’是只负责基本数据类型比较,和引用对象地址比较,而equals则是比较两个对象间的内容是否一样"。甚至否写面试题目的答案中也是以此作为答案。

 

这答案当然不是全部错误,但是有相当一部分是误区,

每个类都是使用Object作为超类的,所有对象(包括数组)也实现这个类方法。

对于Object类的equals方法如下:

public boolean equals(Object obj) {
	return (this == obj);
}

 即是说关于一个普通类,没有作出覆盖equals方法时,该类的比较"=="与equals操作的结果是相同的。

 

 

而为什么再字符串中比较,我们强调要使用equals来比较内容,使用“==”会比较是否为同一对象。

是因为在String中equals方法已经覆盖如下:

    public boolean equals(Object anObject) {
	if (this == anObject) {
	    return true;
	}
	if (anObject instanceof String) {
	    String anotherString = (String)anObject;
	    int n = count;
	    if (n == anotherString.count) {
		char v1[] = value;
		char v2[] = anotherString.value;
		int i = offset;
		int j = anotherString.offset;
		while (n-- != 0) {
		    if (v1[i++] != v2[j++])
			return false;
		}
		return true;
	    }
	}
	return false;
    }

 根据字符串中的每一个字符作出比较(字符比较相当于基础数据类型比较)

 

而对于hashCode()是否要覆盖,

主要是在集合类中使用,例如set中为了保持唯一性,判断一个对象是否相等的时候,除了通过equals的值外,还需要通过判断hashCode是否相等

即:

对象相等,必然hashCode都应该相等

hashCode相等,对象未必相等。

 

 

 

 

文章若有错误,敬请指正,谢谢。

希望更多人把时间花在生活、陪家人和女朋友身上,而不是敲代码上。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值