java中的Object类

2021-06-10 21:05

阅读:619

标签:sys   其它   str   子类初始化   getname   实现   初始化   strong   lse   

简介

  类层次结构最顶层的基类,所有类都直接或间接继承自Object类,所以,所有的类都是以恶个Object(对象)

构造方法

 Object:

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

常用的成员方法

  • int hashCode():
    • 返回对象的哈希码值,该方法通过对象的地址值进行计算,不同对象的返回值一般不同
  • Class> getClass():
    • 返回调用此方法对象的运行时类对象(调用者的字节码文件对象)
  • String toString():
    • 返回该对象的字符串表示
  • boolenan equals():
    • 返回其它某个对象是否与此对象“相等”。默认情况下比较两个对象的引用,建议子类重写

栗子:

package dome6;

public class Test {
    public static void main(String[] args) {
        //非静态方法的调用方式:通过 对象名 . 的形式调用
        Object obj = new Object();   //创建Object对象
        Object obj1 = new Object();
        // int hashCode(): 返回调用者的字节码文件对象,不同对象的哈希码值一般不同
        int a = obj.hashCode();
        System.out.println(a);
        // Class> getClass():返回该调用者的字节码文件对象,一个类只有一个字节码文件
        Class b = obj.getClass();
        Class e = obj1.getClass();
        System.out.println(b);
        System.out.println(e);
        //String toString(): 返回该对象的字符串表示形式,默认打印的是地址值,但是不同的对象地址值肯定不同
        //                   地址值的组成:全类名(包+类) + @ + 通过对象的哈希码的无符号十六进制形式
        String c = obj.toString();
        String p = obj1.toString();
        System.out.println(c);
        System.out.println(p);
        //boolenan equals()  比较两个对象是否相等,默认比较的是地址值,无意义,子类一般都会重写这个方法
        Boolean d = obj.equals(obj1);
        System.out.println(d);
    }
}

class a{

}
class b{

}

 

输出结果:

460141958
class java.lang.Object
class java.lang.Object
java.lang.Object@1b6d3586
java.lang.Object@4554617c
false

重写Object类的方法

  需求:开发中通常需要将对象转换成字符串形式就行传输,也需要对即将使用的对象进行相等判断。定义标准javaBean类,重

写toString和equals方法。

  步骤:

    定义java Bean类Student,属性:id,name,score

    重写toString():

      该对象的字符串表现形式,一般都是包含所有属性值且具有一定格式的字符串

    重写equals():

代码:

package dome6;

import java.util.Objects;

public class Student {
    public static void main(String[] args) {
        //测试toSting()方法
    Stu stu = new Stu(19,"亚索",23);
        //输出语句直接打印对象,默认调用了该对象的toSting()方法,因为所有的类都继承自Object
        System.out.println(stu);
        //测试equals
        Stu stu1=new Stu(19,"压缩",23);
        System.out.println(stu.equals(stu1));
    }
}
class Stu{
    //私有变量
    private int id;
    private String name;
    private int score;
    //构造方法
    public Stu(){};

    public Stu(int id, String name,int  score) {
        this.id = id;
        this.name = name;
        this.score = score;
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }
    //重写方法
    //重写toString()
    @Override
    public String toString() {
        return "Stu{" +
                "id=" + id +
                ", name=‘" + name + ‘\‘‘ +
                ", score=‘" + score + ‘\‘‘ +
                ‘}‘;
    }
    //重写equals():用来比较两个对象是否相同
    //自定义版的重写equals()方法
    //假设id属性值相同,两个对象就是同一个对象
    //注意 在实际开发中,我们把两个对象的哥哥属性值都相同的情况下,才会认为这两个对象是同一个对象
//    @Override
//    public boolean equals(Object obj){
//        /*
//        this:谁调用,this就表示谁
//        obj:对象
//         */
//        //向下转型
//        Stu s2 = (Stu)obj;
//        //比较id是否相同
//        return this.id == s2.id;
//    }
//通过快捷键实现   alt+insert
    @Override
    public boolean equals(Object o) {
        //this:stu  o:stu1
        // 比较两个对象的地址值,提高效率
        //如果if语句控制的语句体只有一行代码,则不需要大括号
        if (this == o) return true;
        //判断要比较的两个对象是否是同一个类型的对象
        //程序默认 this.getClass()
        if (o == null || getClass() != o.getClass()) return false;
        //向下转型,正常的逻辑代码
        Stu stu = (Stu) o;
        return id == stu.id &&
                score == stu.score &&
                Objects.equals(name, stu.name);   //name属于String,属于引用型变量,所以有equals()方法
        
    }

}

 

java中的Object类

标签:sys   其它   str   子类初始化   getname   实现   初始化   strong   lse   

原文地址:https://www.cnblogs.com/zxy6/p/14243046.html

上一篇:DAY 16 PYTHON入门

下一篇:线程池


评论


亲,登录后才可以留言!