==: 它的作⽤是判断两个对象的地址是不是相等。即,判断两个对象是不是同⼀个对象(基本数据类型==⽐较的是值,引⽤数据类型==⽐较的是内存地址)。
equals(): 它的作⽤也是判断两个对象是否相等。但它⼀般有两种使⽤情况:

  • 情况 1:类没有覆盖equals()⽅法。则通过equals()⽐较该类的两个对象时,等价于通过==⽐较这两个对象。
  • 情况 2:类覆盖了equals()⽅法。⼀般,我们都覆盖equals()⽅法来⽐较两个对象的内容是否相等;若它们的内容相等,则返回true(即,认为这两个对象相等)。

举个例⼦:

public class test1 {
    public static void main(String[] args) {
        String a = new String("ab");
        // a 为⼀个引⽤
        String b = new String("ab");
        // b为另⼀个引⽤,对象的内容⼀样
        String aa = "ab";
        // 放在常量池中
        String bb = "ab";
        // 从常量池中查找
        if (aa == bb) // true
        System.out.println("aa==bb");
        if (a == b) // false,⾮同⼀对象
        System.out.println("a==b");
        if (a.equals(b)) // true
        System.out.println("aEQb");
        if (42 == 42.0) {
            // true
            System.out.println("true");
        }
    }
}

说明:

  • String中的equals⽅法是被重写过的,因为objectequals⽅法是⽐较的对象的内存地址,⽽Stringequals⽅法⽐较的是对象的值。
  • 当创建String类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引⽤。如果没有就在常量池中重新创建⼀个String对象。
最后修改日期: 2021年11月20日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。