== 和 equals方法

42 阅读1分钟
  1. “ == ”代表比较双方是否相同。如果是基本类型则表示值相等,如果是表示引用类型则表示地址相等即是同一个对象。

equals()提供定义”对象内容是否相等“的逻辑,仅适用于引用数据类型。

其中Object中的equals方法的源码:

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

所以:Object类中定义的equals()和==的作用是相同的

package com.it.test;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
import org.w3c.dom.ls.LSOutput;

public class Test {
    public static void main(String[] args) {
        Person s = new Person();
        Person t = new Person();
        System.out.println(s == t);
        System.out.println(s.equals(t));
    }
}

class Person {
    String name;
    int height;
    public void rest() {
        System.out.println("休息一下");
    }
}

2. 像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的“实体内容”(即属性)是否相同。

通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的“实体内容”是否相同。那么,我们就需要对Object类中的equals()进行重写。

★重写的原则:比较两个对象的实体内容是否相同。

image.png