java笔记--Object类

Object:

Object是不断抽取而来的,具备所有对象的共性内容,是所有类的根类。

常用的共性功能:

1 equals方法:

class Person extends Object{
    private int age;
    Person(int age){
        this.age=age;
    }
    /*
    //比较Person的年龄,是否是同龄人
    public boolean compare(Person p){
        return this.age==p.age;
    }
    */

    /*equals方法覆盖     开发的时候经常用
    一般都会覆盖此方法,根据对象的特有内容,建立判断对象是否相同的依据
    */
    public boolean equals(Object obj)//Object obj=p2{
    {
        if(obj instanceof Person){
            //return flase
            throw new ClassCastException("类型错误");
        }
        Person p=(Person) obj;//因为obj在上面被向上转型为Object,引用不了age,所以这里要强转为Person
        return this.age==p.age;
    }
}
class Demo{}
public class ObjectDemo {
    
    public static void main(String[] args) {    
        Person p1=new Person(20);
        Person p2=new Person(20);
        Person p3=p1;
        Demo d=new Demo();
        
        System.out.println(p1==p2);
        System.out.println(p1==p3);
        System.out.println(p1.equals(p2));//比较的是地址,是否指向同一个对象
        System.out.println(p1.equals(p3));
        System.out.println(p1.equals(d));
    }
}

运行:
java笔记--Object类_第1张图片

2 hashCode方法:(重点:结构体会用)

当equals方法被重写时,通常有必要重写hashCode方法,以维护hashCode方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

class Person extends Object{
    private int age;
    Person(int age){
        this.age=age;
    }
    public boolean equals(Object obj)//Object obj=p2{
    {
        if(obj instanceof Person){
            //return flase
            throw new ClassCastException("类型错误");
        }
        Person p=(Person) obj;//因为obj在上面被向上转型为Object,引用不了age,所以这里要强转为Person
        return this.age==p.age;
    }
    public int hashCode(){
        return age;
    }
}
class Demo{}
public class ObjectDemo {
    
    public static void main(String[] args) {    
        Person p1=new Person(20);
        Person p2=new Person(20);
        Person p3=p1;
        Demo d=new Demo();
        
        System.out.println(p1);
        System.out.println(p1.hashCode());
        System.out.println(Integer.toHexString(p1.hashCode()));
    }
}

运行:

3 getClass:

系统自带的类Class里的方法,在主函数中添加代码:

Class clazz1=p1.getClass();
        Class clazz2=p2.getClass();
        System.out.println(clazz1==clazz2);
        System.out.println(clazz1.getName());

运行:

get的Name就是编译类Person后得到的Person.class字节码文件的Name。

4 toString方法:

class Person extends Object{
    private int age;
    Person(int age){
        this.age=age;
    }
    
    public boolean equals(Object obj)//Object obj=p2{
    {
        if(obj instanceof Person){
            //return flase
            throw new ClassCastException("类型错误");
        }
        Person p=(Person) obj;
        return this.age==p.age;
    }
}
class Demo{}
public class ObjectDemo {
    
    public static void main(String[] args) {    
        Person p1=new Person(20);
        Person p2=new Person(20);
        Person p3=p1;
        Demo d=new Demo();
        
        System.out.println(p1);
        System.out.println(p1.getClass().getName()+"$"+Integer.toHexString(p1.hashCode()));
    }
}

运行:

在Person中添加方法:

public String toString(){//System.out.println(p1);主函数中会默认调用toString
        return "Person :"+age;
    }

运行:

在开发中,像Person这种类似于数据模型的类,就是说这种类会产生n多对象(学生那,工人那...),他们里边通常都会覆盖equals、hashCode、toString方法。

你可能感兴趣的:(java笔记--Object类)