JAVA基础(Object类)

1,Object类的概述

  • 类层次结构的根类

  • 所有类都直接或者间接的继承自该类

2,构造方法

  • public Object()

  • 子类的构造方法默认访问的是父类的无参构造方法

3,Object类的hashCode()方法

  • public int hashCode()

  • 返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。

  • 不同对象的,hashCode()一般来说不会相同。但是,同一个对象的hashCode()值肯定相同。

package com.xiaoshuai.object;

public class Demo1_HashCode {





    public static void main(String[] args) {

        Object object = new Object();

        int hashCode = object.hashCode();

        System.out.println(hashCode);

        Student s1 = new Student("张三", 23);

        Student s2 = new Student("李四", 24);

        

        System.out.println(s1.hashCode());

       

        System.out.println(s2.hashCode());

    }

}
  • 打印两个不同的地址值

4,Object类的getClass()方法

  • getClass 返回调用者的类名。

  • public final Class getClass()

    • 返回此 Object 的运行时类。

    • 可以通过Class类中的一个方法,获取对象的真实类的全名称。    

  • public String getName()  获取名称

package com.xiaoshuai.object;

public class Demo2_GetClass {

    public static void main(String[] args) {

        Student s = new Student("张三", 23);

        // Class clazz = new Class();

        Class clazz = s.getClass();

        String name = clazz.getName();        //获取该对象的字节码文件

        System.out.println(name);            // 获取名称

    }

}

5,Object类的toString()方法

    /**

     * @param args

     * com.xiaoshuai.bean.Student@bcda2d

     * public Stirng toString() {

            return  getClass().getName() + "@" + Integer.toHexString(hashCode())

        }

        左边 :类名

        中间:@

        右边:hashCode的十六进制表现形式

        这么写没有什么实际意义。

        toString方法的作用:可以更方便的显示属性值。

        getXxx方法是为了获取值,可以显示也可以赋值,或者其他操作。

      

        Object .toString :

         原码:   getClass().getName() + "@" + Integer.toHexString(hashCode())    

         getClass().getName() 是类名。

         @

         Integer.toHexString(hashCode())    十六进制的哈希码值

         由于默认情况下的数据对我们来说没有意义,一般建议重写该方法。

     */

  • public String toString()

  • 返回该对象的字符串表示。

【1】重写toString方法

package com.xiaoshuai.bean;

public class Student {

    private String name;

    private int age;

    public Student() {                       

        super();

    }





    public Student(String name, int age) {      

        super();

        this.name = name;

        this.age = age;

    }





    public String getName() {                

        return name;

    }





    public void setName(String name) {

        this.name = name;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }





    /*@Override

    public String toString() {

        

        return "我的姓名是:" + name + ",我的年龄是:"+ age;

    }*/

    



    @Override

    public String toString() {

        return "Student [name=" + name + ", age=" + age + "]";

    }

}

最终版

       toString  方法我作用。可以跟方便的显示属性值。

       getXXX 方法可以显示赋值也可以做其他操作。    

       直接打印对象的引用。默认会调用toString 方法。

        

    javabean 里面一般都会重写toString方法

6,Object类的equals()方法

  • equals方法,比较两个对象是否相等

    @param args

    public boolean equals(Object obj){

          return (this == obj);

    }

Object中的equals方法是比较对象的地址值,没有什么意义,我们 需要重写它。

因为在开发中我们通常比较的是对象中的属性值,我们认为 相同属性是同一个对象,这样我们就需要重写equals方法。

  • 重写equals方法

指示其他某个对象是否与此对象“相等”。

默认情况下比较的是对象的引用是否相同。

由于比较对象的引用没有意义,一般建议重写该方法。

重点:==号和equals方法的区别

  • ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值

  • equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性


 

public class Demo4_Equals {

    public static void main(String[] args) {

        

        

        // 如果说调用的类,没有重写equals方法的话,那么默认比较的是地址值.

        Student s1 =  new Student("张三", 23);

        Student s2 =  new Student("张三", 23);

        boolean b = s1.equals(s2);               //比较2个对象是否相等

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

        System.out.println(b);                    //重写之后比较的是对象中的属性值

    }

}

猜你喜欢

转载自blog.csdn.net/Cricket_7/article/details/92408381