Object类

1.1 Object概述

Object类是所有类的超类、根类,基类;

任何类直接或间接地继承Object类;

所有对象都具备Object的方法;

Object作为参数可以接受任何对象,作为返回值可以返回任何对象。

1.2 getClass()方法

  • getClass()方法用来获取调用者所属的类型;
  • 通常在判断两个对象的引用类型是否一致。
  • public final native Class<?> getClass(){};
  • getClass()方法返回的是调用者所属的类
//创建一个学生类
public class Students{
    private String name;
    private String age;
    
    public Students(){}
    public Students(String name,String age){
        this.name=name;
        this.age=age;
    }
    
    public void setName(String name){
        this.name=name;
    }
    public void setAge(String age){
        this.age=age;
    }
    
    public String getName(){
        return name;
    }
    public String getAge(){
        return age;
    }
}
//创建测试类
public class Test{
    public static void main(String[] args){
        Students st1=new Students();
        Students st2=new Students();//创建两个对象
        
        Class c1=st1.getClass();
        Class c2=st2.getClass();//getClass方法返回的是调用者对象的类型
        
        if(c1==c2){////getClass方法多用于判断两者是否为同一类型
            System.out.println("st1和st2类型一致");
        }else{
            System.out.println("st1和st2类型不一致");
        }
    }
}

1.3 hashCode()方法

  • public native int hashCode(){};
  • hashCode()方法返回调用者的哈希码值。
  • 哈希码值是根据对象的地址字符串数字使用hash算法计算出来的int类型的数值。
  • 相同对象返回的相同哈希码
//创建测试类
public class Test{
    public static void main(String[] args){
        Students st1=new Students();
        Students st2=new Students();//创建两个对象
        System.out.println(st1.hashCode);
        System.out.println(st2.hashCode);
        //对象内存不一致、哈希码值也不一样
        
        Students st3=st1;//st1的内存地址赋值给了st3
        
        if(st3.hashCode==st1.hashCode){
            System.out.println("st1和st2哈希码值一致");
        }else{
            System.out.println("st1和st2哈希码值不一致");
        }
    }
}

object 类 java object类_object 类 java

1.4 toString()方法

//object中的toString()方法
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
  • toString()方法返回的是描述调用者对象的字符串;默认情况下返回的是一个由该对象所属的类名、@符号以及十六位进制的内存地址
  • 可以在对象的类中重写toString()方法,以此让外部调用对象的toString()方法时可以展示其各个属性值。
//创建学生类
public class Students{
    private String name;
    private String age;
    
    public Students(){}
    public Students(String name,String age){
        this.name=name;
        this,age=age;
    }
    
    public void setName(String name){
        this.name=name;
    }
    public void setAge(String age){
        this.age=age
    }
    public String getName(){
        return name;
    }
    public String getAge(){
        returen age;
    }
    
    @override//快捷键ALT+INS生成  
    public String toString(){
        return "Students{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
    
}
//测试类
public class Test{
    public static void main(String[] args){
        Students st1=new Students();
        Students st2=new Students();//创建两个对象
        /*
        System.out.println(st1.toString());
        System.out.println(st2.toString());
        当学生类没有重写toString方法时,输出
        com.liuwei.API.ObjectDemo.Students@1b6d3586
        com.liuwei.API.ObjectDemo.Students@4554617c
        */

        //当我们在学生类中重写toString方法
        st1.setName("工地佬");
        st1.setAge("25");
        System.out.println(st1.toString());
        //输出结果
        //Students{name='工地佬', age='25'}
}

1.5 equals()方法

////object中的equals()方法
public boolean equals(Object obj) {
      return (this == obj);
}
  • equals()方法默认比较的是两者的对象地址
  • 当我们在对象类中重写equals()方法后,外部调用对象的equals()方法便成为比较对象的内容
//创建学生类
public class Students{
    private String name;
    private String age;
    
    public Students(){}
    public Students(String name,String age){
        this.name=name;
        this,age=age;
    }
    
    public void setName(String name){
        this.name=name;
    }
    public void setAge(String age){
        this.age=age
    }
    public String getName(){
        return name;
    }
    public String getAge(){
        returen age;
    }
    
    @override//快捷键ALT+INS生成  
    public String toString(){
        return "Students{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
        @Override
    public boolean equals(Object o) {
        if (this == o) return true;//判断两个对象引用是否相同,若一致,则对象一致,内容也就一样
        if (o == null || getClass() != o.getClass()) return false;//判断被比较对象是否为空值,或者两个对象类名不同则为false
        Students students = (Students) o;//强制转换
        return Objects.equals(name, students.name) && Objects.equals(age, students.age);//匹配内容
    }
    
    
}
//测试类
public class Test{
    public static void main(String[] args){
        //equals()方法
        System.out.println(st1.equals(st2));
        //默认条件下的equals方法对于基础类型是比较值,对象类型是比较内存地址

        //我们可以通过在类里重写equals方法,使得对象在调用equals方法时比较的是内容
        Students st5 = new Students("牛马", "25");
        Students st4= new Students("牛马", "25");
        System.out.println(st4.equals(st5));//true
        //当我们在重写引用对象的类中重写equals方法后,将比较的是两个对象的内容

    }
}