Object 类的使用

Object 类的使用

1.java. lang.Object类
2.Object类是所有java类的根父类
3.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类
4.Object类中的功能(属性,方法)就具有通用性。

属性:无

java.lang.Object 是所有类的父类,也就是说java中所有的类都继承Object ,都可以使用Object类中的方法

  • Object类中有12个方法,但是有一个是private修饰的私有方法,还有三个是重载的wait()方法,
  • 所以实际上子类使用的只有9个方法。

方法:

  • boolean equals(Object obj)
    指示其他某个对象是否与此对象“相等”。

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

  • Class<?> getClass()
    返回此 Object 的运行时类。

  • int hashCode()
    返回该对象的哈希码值。

  • protected Object clone()
    创建并返回此对象的一个副本。

  • protected void finalize()
    当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。

  • void wait()
    在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待

  • void notify()
    唤醒在此对象监视器上等待的单个线程。

  • void notifyAll()
    唤醒在此对象监视器上等待的所有线程。

Object 类中的toString的使用

  • 1.当我们输出一个对象的引用时,实际上即使调用当前对象的toString();

  • 2.Object类中toString() 的定义:
    public String toString(){
    return getClass().getName() + “@” + Integer.toHexString(hashCode());
    }

  • 3.像String ,Date,File .包装类等都重写了Object类中的toString()方法。使得在调用对象的toString() 方法时,返回"实体内容"信息
    4.自定义类也可以重写toString ()方法,当调用此方法时,返回对象的“实体内容”

Object类中equals()方法

  • Object类中equals()方法和 == 的作用是相同的,比较两个对象的地址值是否相同,即两个引用是否指向同一个对象.

  • 像String、 Date 、 File 、 包装类等,都重写了Object类中的equals()方法。重写以后比较的不是两个引用的地址值是否相同,而是比较两个对象的“实体内容”是否相同

  • 通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的“实体内容”是否相同,

  • 重写的原则:比较两个对象的实体内容是否相同

== 和 equals()的区别?

① == 既可以比较基本数据类型,也可以比较引用类型。
当两边的操作数是基本数据类型时,比较的是(值本身)内容。当两边的操作数时引用类型时,比较的是引用的地址值。
② equals()只能比较引用类型。Object 类中的equals()使用的是" == "(作用和==相同),比较的是引用类型的地址值,如果重写之后,按照重写时定义的规则进行比较,比较的是对象的内容

toString()

直接输出对象时,默认调用Object的toString()方法
展示对象的地址值,如果想要输出对象中的内容,可以重写从Object类中的继承来的toString(),展示了对象的属性值。

对象 instanceof 数据类型

判断左边对象是否是右边数据类型

@Override
    public boolean equals(Object obj){
        /*
        * 比较传入的参数和当前对象的地址值是否相等
        * 若相等直接返回true
        * */
        if (this == obj){
            return true;
        }
        /*
        * 判断传入的参数是否为null,以及传入的参数类型与当前对象的类型是否相符。若为null 或类型不相符,直接返回false.
        * */
       /* if (obj == null || obj instanceof Student){//错误写法
            return false;
        }*/
        if (obj == null){
            return false;
        }
        if (obj instanceof Student){//正确使用instanceof 关键字比较左边对象是否是右边类型的正确写法。
            Student student = (Student)obj;
            return age == student.age && Objects.equals(name,student.name);
        }
        /*
        * 统一类型,将传入的参数类型从Object类型向下造型为Student类型,这样才能调用子类型特有的内容进行下一步操作
        * */
        Student student = (Student)obj;
        //比较基本数据类型直接使用==比较内容,当比较引用类型时不能使用==, Objects是Object的工具类
        return age == student.age && Objects.equals(name,student.name);
    }

自动生成equals() 方法。 getClass 获取运行时对象类型。

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Student student = (Student) o;
    return age == student.age &&
            Objects.equals(name, student.name);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值