JAVA笔记7-Object类之toString方法和equals方法

位于rt.jarjavalangObject.class

Object类是所有Java类的根基类(Java中只有一个根基类,C++中有多个)。如果在类声明中未使用extends关键字指明其基类,则默认其基类为Object类。

所有对象,包括数组,都实现了Object类的方法。

1、toString()方法

蓝色高亮行代码等价于d.toString()。输出:d:=Dog@757aef。重写toString()方法:

2、哈希编码

3、equals()方法

例题:

public class TestEquals{
    public static void main(String args[]){
        Cat c1=new Cat(1,2,3);
        Cat c2=new Cat(1,2,3);
        System.out.println("c1==c2: "+(c1==c2));//false
        System.out.println("c1.equals(c2): "+c1.equals(c2));//false
    }
}
class Cat{
    int colour;
    int high;
    int weight;
    public Cat(int c,int h,int w){
        colour=c;
        high=h;
        weight=w;
    }
}

注意:都返回false。因为比较两个对象时,c1==c2比较的是地址,c1.equals(c2)默认也是如此(只有当c1,c2指向同一对象时为true)。所以应重写equals()方法。

    //重写equals()方法
    public boolean equals(Object obj){
        if(obj==null){
            return false;
        }
        else if(obj instanceof Cat){
            Cat c=(Cat) obj;
            if(c.colour==this.colour&&c.high==this.high&&c.weight==this.weight){
                return true;
            }
        }
            return false;
    }
}

  重写equals()方法后,输出c1==c2:false,c1.equals(c2):true。

  JDK提供的一些类(如String,Date等),重写了Object的equals方法,调用这些类的equals方法时,x.equals(y),当x和y所引用的对象是同一类对象且属性相等时(并不一定是相同对象),返回true,否则返回false。对于用户自定义类型,可根据需要重写equals方法。

public class TestEquals{
    public static void main(String args[]){
        String s1=new String("hello");
        String s2=new String("hello");
        System.out.println("s1==c2: "+(s1==s2));//false
        System.out.println("s1.equals(s2): "+s1.equals(s2));//true
    }
}
原文地址:https://www.cnblogs.com/seven7seven/p/3656172.html