==和equals方法

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

        equals()提供定义“对象内容相等”的逻辑。比如:我们在公安系统中认为id相同的人就是同一个人,学籍系统中认为学号相同的人就是同一个人。

        equals()默认是比较两个对象的hashCode值。也可以根据自己的要求重写equals()方法。

自定义类重写equals()方法

public class TestEquals{
    public static void main(String[] args){
        Person p1 = new Person(123,"小明");
        Person p2 = new Person(123,"小红");
        System.out.println(p1 == p2);  //false,不是同一个对象
        System.out.println(p1.equals(p2));  //true,id相同则认为两个对象内容相同
        String s1 = new String("计算机");
        String s2 = new String("计算机");
        System.out.println(s1 == s2);  //false,两个字符串不是同一个对象
        System.out.println(s1.equals(s2));  //true,两个字符串内容相同
    }
}
class Person{
    int id;
    String name;
    public Person(int id,String name){
        this.id = id;
        this.name = name;
    }

    public boolean equals(Object obj){
        if(obj == null){
            return false;
        }else{
            if(obj instanceof Person){
                Person c = (Person)obj;
                if(c.id == this.id){
                    return true;
                }
            }
        }
        return false;
    }
}

JDK提供的一些类,如:String、Date、包装类等,重写了Object的equals方法,调用这些类的equals方法,x.equals(y),当x和y所引用的对象是同一类对象且属性内容相等时(并不一定是相同对象),返回true否则返回false。

你可能感兴趣的:(java,jvm,开发语言)