关于Object类的一些常见方法

Object类

  • 超类,基类,所有类的直接或间接父类,位于继承树的最顶层

  • 任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承

  • Object类中所定义的方法,是所有对象都具备的方法

  • Object类型可以存储任何对象

    • 作为参数,可接受任何存储对象

    • 作为返回值,可返回任何对象

getClass()方法

public final Class<?> getClass(){}

返回引用中存储的实际对象类型

应用:通常用于判断两个引用中实际存储的对象类型是否一致

package objects;

public class TestObject {
    public static void main(String[] args) {
        Animal a = new Dog();
        Animal b = new Cat();
        if(a.getClass() == b.getClass()){
            System.out.println("对象类型一样");
        }else{
            System.out.println("对象类型不一样");
        };
        
    }

}
class Cat extends Animal{};
class Dog extends Animal{};
class Animal{};



hashCode()方法

  • public int hashCode(){}

  • 返回改对象的十进制的哈希码值

  • 哈希算法根据对象的地址或字符串或数字计算出来的int类型的数值

  • 哈希码并不唯一,可保证相同对象返回相同哈希码,尽量保证不同对象返回不同哈希码

package objects;

public class TestHashCode {
    public static void main(String[] args) {
        for (int i=0;i<3;i++){
            Object obj = new Object();
            System.out.println(obj.hashCode()+"\t"+obj);
        }

    }
}

toString()方法

  • public String toString(){}

  • 返回该对象的字符串表示(表现形式)

  • 可以根据程序需求覆盖该方法,如:展示对象各个属性值

    package objects;
    
    public class TestHashCode {
        public static void main(String[] args) {
          /*  for (int i=0;i<3;i++){
                Object obj = new Object();
                System.out.println(obj.hashCode()+"\t"+obj);
            }*/
          
          Teacher t = new Teacher("A",10);
          System.out.println(t.toString());
        }
    }
    
    
    class  Teacher{
    
        String name;
        int age;
    
        public Teacher(String name,int age){
            super();
            this.name = name;
            this.age = age;
    
    
        }
    
        @Override
        public String toString() {
            return "Teacher{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    

equals()方法

  • public boolean equals(Object obj){}

  • 默认实现为(this == obj),比较两个对象地址是否相同

  • 可进行覆盖,比较两个对象的内容是否相同

equals()方法覆盖步骤

  • 比较两个引用是否指向同一个对象

  • 判断obj是否为null

  • 判断两个引用指向的实际对象类型是否一致

  • 强制类型转换

  • 依次比较各个属性是否相同

package objects;

import java.util.Objects;

public class TestEquals {

    public static void main(String[] args) {
        /*Object o1 = new Object();
        Object o2 = new Object();
        System.out.println(o1.equals(o2));
        System.out.println(o1 == o2);*///无法人为干预

        Student s1 = new Student("a",10,"男",99D);
        Student s2 = new Student("a",11,"男",99D);

        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));


    }
}

class Student{
    String name;
    int age;
    String sex;
    double score;

    public Student(String name, int age, String sex, double score) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.score = score;
    }
    //Student类下重写equals方法
    @Override
    public boolean equals(Object o){
        //如果为同一个对象,则返回true
        if(this == o){return true;}
        //如果对象为空,返回false
        if(null == o){return false;}
        //如果引用对象类型不同,返回false
        if(this.getClass() != o.getClass()){return false;}
        //强制类型转换
        Student stu =  (Student)o;
        //使用this的各个属性与o的各个属性值一一进行比较,如果所有属性完全相同,则代表二者相同
        if(this.name.equals(stu.name) && this.age == stu.age &&
                this.score ==stu.score && this.sex.equals(stu.sex) )
        {return true;}
        return false;
    }

    /*public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Student)) return false;
        Student student = (Student) o;
        return age == student.age &&
                Double.compare(student.score, score) == 0 &&
                Objects.equals(name, student.name) &&
                Objects.equals(sex, student.sex);
    }*/

/*    @Override
    public int hashCode() {
        return Objects.hash(name, age, sex, score);
    }*/

    /*
    public boolean  equals(Object o){
        o = new Student(name,age,sex,score);
        if(this.name == ((Student) o).name){
            return true;
        }else{
            return false;
        }

    }*/


}

finalize()方法

  • 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列

  • 垃圾对象:没有有效引用指向此对象时,为垃圾对象

  • 垃圾回收:由GC销毁垃圾对象,释放数据存储空间

  • 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象

  • 手动回收机制:使用System.gc();通知JVM执行垃圾回收

发布了6 篇原创文章 · 获赞 0 · 访问量 195

猜你喜欢

转载自blog.csdn.net/weixin_42286688/article/details/104068270