为什么java内要判断两个对象是否相等呢?

 我来答
驳平橙02
2018-03-20 · TA获得超过6224个赞
知道答主
回答量:42
采纳率:100%
帮助的人:1.2万
展开全部

一个标准的实体类的4大基本规则:1.封装(属性私有化,分别提供对应的get与set方法等),2、提供无参构造 ,3、重写:toString,equals,hashCode这3个方法,4、实现java.io.Serializable接口。所以java要判断两个对象是否相等。

先说equals,重写它就是为了以后比较对象是否相等,比如你问题中的假如父类是person,子类是student,那么当我们new了几个student后,在程序中怎么去判断这几个 student实例是否是同一个学生呢?这时如果我们的student重写了equals(比如你按照学号来比较),那么你就可以用S1.equals(S2)来比较了。

至于hashCode,那是因为假如我们存取数据时  是存放在键值对中时(比如Map),这时候光靠equals效率不高,这时候用对象的哈希码(即hashCode方法得到的)来查找和比较更快,所以一般重写equals方法必须重写hashCode方法,因为java规定相等的对象必须有相等的哈希码。

秒杀腹黑菟
2018-02-04 · TA获得超过502个赞
知道小有建树答主
回答量:142
采纳率:100%
帮助的人:70万
展开全部
这是面向对象的特性
由于java‘是纯面向对象语言,所以对对象的管理都是用自动分配的HashCode进行管理,这样的话用普通的“==”自然就不能解决问题。
试想一下,两个不同HashCode的String类型,拥有相同value的变量他们能是相等的么?
从对象的角度而言,肯定是不相等的。因为他们从直接寻址的角度而言,根本就是存储在不同地址的两个东西,但是他们在偏移地址上存储的分量value是相同的,从某种程度上来说有证明这两个String变量其实描述的是同一个东西。
如何让开发人员区分这两个情况,java想了一个比较好的方法
它用==来判断对象的HashCode相同的情况,同时提供了一个可重写的方法equals让程序员自定义判断两个对象实际相等的条件。
正如:
String s1 = new String("1");
String s2 = new String("1");
String s3 = s1;
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
System.out.println(s1==s3);
System.out.println(s1.equals(s3));

结果是什么呢?自己想啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式