Object类

类层次结构最顶层的基类,所有类直接或间接的继承自Object类。

Object()构造方法,构造一个对象,所有子类对象初始化都会优先调用该方法

Java.base->java.lang->Object->hashCode(),getClass(),toString(),equals()

int hashCode():返回对象的哈希码值,该方法通过对象的地址值进行计算,不同对象的返回值一般不同

Class<?>getClass():返回调用此方法的运行时类对象,该类的字节码文件

String  toString():返回该对象的字符串表示

boolean equals():返回其它某个对象是否与此对象“相等”,默认情况下比较两个对象的地址值,没什么意义,建议子类重写这个方法。

package com.wang.object;

public class Demo01 {
    public static void main(String[] args) {
        //非静态方法的调用方式,通过对象名.的形式调用
        Object o1=new Object();
        Object o2=new Object();
        //测试Object类中的成员方法
        int code1=o1.hashCode();//不同对象的哈希码值一般不同,哈希码值就是根据地址值计算出来的数字
        int code2=o2.hashCode();
        System.out.println(code1);
        System.out.println(code2);
        System.out.println("===================================");
        Class class1=o1.getClass();//字节码文件 一个类的字节码文件一样
        Class class2=o2.getClass();
        System.out.println(class1);
        System.out.println(class2);
        System.out.println("===================================");
        String s1=o1.toString();
        String s2=o2.toString();
        //打印的是地址值。不同对象的地址值不同
        //地址值的组成:全类名(包名+类名)+@+该对象的哈希码的无符号十六进制
        System.out.println(s1);
        System.out.println(s2);
        System.out.println("========================================");
        //比较两对象是否相等,默认比较的是地址值,无意义,因为不同对象的地址值一定不一样。子类一般都会重写这个方法
        boolean b1=o1.equals(o2);
        System.out.println(b1);
    }
}

JavaBean重写Object类的方法

需求:开发中通常需要将对象转化成字符串形式进行传输,也需要对即将使用的对象进行相等判断。定义标准JavaBean类,重写toString和equals方法

步骤:

①定义标准JavaBean类Student,属性id、name、score

②重写toString():该对象的字符串表现形式,一般都是包含所有属性值且具有一定的格式的字符串

③重写equals():通过关键属性id来确定该类的两个对象是否相同,可以比较所有属性值

④创建Student对象并使用

package com.wang.object;

public class Demo02 {
    public static void main(String[] args) {
        //测试toString
        Student s1=new Student("001","王迎婧",100);
        //输出语句直接打印对象,默认调用了该对象的toString方法
        //重写toString方法后测试
        System.out.println(s1);
        System.out.println(s1.toString());
       //测试equals方法
        Student s2=new Student("002","往往",99);
        System.out.println(s1.equals(s2));

    }
}
class Student{
    private String id;
    private String name;
    private int score;

    public void setId(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public int getScore() {
        return score;
    }
    public Student(){}
    public Student(String id,String name,int score){
        this.id=id;
        this.name=name;
        this.score=score;
    }
    @Override
    public String toString() {
        return "Student{id="+id+", name='"+name+"', score="+score+"}";
    }

   /* @Override
    public boolean equals(Object obj) {
        //向下转型
        Student s2=(Student)obj;
        //在实际开发中会比较对象的每一个属性,不会仅仅比较id
        return this.id==s2.id;
    }
    */
    //自动生成的步骤 右键-generate-equals和hashCode
    @Override
    public boolean equals(Object o) {
        //this:s1   o:s2
        //比较两个对象的地址值是否相同
        if (this == o) return true;
        //判断要比较的两个对象是否是同一个类型的对象
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return score == student.score &&
                id.equals(student.id) &&
                name.equals(student.name);
    }
    @Override
    public int hashCode() {
        return Objects.hash(id, name, score);
    }
}

 

posted @ 2019-10-30 19:36  王迎婧  阅读(129)  评论(0编辑  收藏  举报