JAVA中,为什么object对象中的equals方法比较的是同一,而String对象比较的是相等?

2024-11-23 21:24:20
推荐回答(3个)
回答1:

因为在java中,Object类是所有类的始祖,所有类都直接或者间接继承了它。Object类中equals方法比较的是两个对象是否具有相同的引用,如果两个对象的引用都一样(即指向同一块内存),那它们一定是相等的。
至于为什么要这样设计,因为Object没办法判断是什么来继承他,不能具体的去实现这个逻辑,因此交给它的子类自己根据自己的特征去重写这个方法。举个列子,比如定义了一个人类Person,有子类学生Student和员工Employee类,这时候Person类里面可以有name,age等这些通用的属性。但如果在Person里面定义一个简介(getIntroduction())的方法,就不好具体去叙述,这时候就可以交给子类自己去重写这个方法,比如Student类的getIntroduction()方法里面可以写“什么学校、什么专业、什么年级”等,Employee类里面就可以写“什么行业、什么职位”等。
所以Object很直接,不管你是什么类型,怎么进行比较,只要你们指向同一块内存,那你们就相等。比如String类,重写equals方法后比较的是字符串的具体值,但谁也不能否认,两个引用指向同一个地址时,值也一样相等。
---------------------刚好看到这,顺势把个人理解叙述一下,希望有用----------------

回答2:

因为String类里面已经覆盖了equals方法。所以比较的是对象的内容,但是如果是数组的话就不行,因为数组没有覆盖equals方法,所以比较的是对象的引用。覆盖的代码如下
@Override
public boolean equals(object obj){
if(obj instanceof Employee){
return this.id = ((Employee)obj).id;
else
return false;
}

回答3:

类Object
equals方法对于任何非空的参考值x和y,此方法返回true当且仅当x和y引用同一个对象(x
== y有价值true)。