• [04] Object类



    1、基本概念

    Object类是所有类的父类,位于java.lang包中。任何类的对象,都可以调用Object类中的方法,包括数组对象。



    2、常用方法

    2.1 toString

    toString可以将任何一个对象转换为字符串返回,返回值的生成算法为:
    getClass().getName() + '@' + Integer.toHexString(hashCode()) 

    即默认的toString方法会输出【包名+类名+@+16进制数】,另外,像常见的 System.out.print(Object obj)也是默认调用了toString方法。

    大多数时候我们自定义类都不需要如此的输出形式,所以一般会对继承下来的toString进行重写。

    2.2 equals

    equals方法是比较对象的虚地址,即引用。

    但是大部分时候是被子类重写了的,比如大名鼎鼎的String的equals,就是比较字符串的内容是否相同,而非引用是否相同。

    我们知道 “==” 实际上也是用来比较对象的虚地址,但正是因为其无法改写,所以出现了equals,让我们能自由重写该方法,以适应我们的需求。

    2.3 hashCode

    hashCode方法用来获取对象的哈希码值,为16进制。

    (哈希码并不是完全唯一的,它是一种算法,让同一个类的对象按照自己不同的特征尽量的有不同的哈希码,但不表示不同的对象哈希码完全不同)

    我们知道,在比较两个对象时往往重写equals方法,根据需要比较两个对象是否相等,比如Book类的两个对象,我们认为不论出版社是否相同,只要书名相同作者相同就视为相同,这时候就要重写equals方法。

    值得注意的是,如果我们不同时重写hashCode方法,看似没有什么问题,equals确实会返回true,但是在涉及到集合如Set时,就会出乎我们的意料。Set集合中我们希望相同的对象去重,但不重写hashCode是无法实现的,因为hashCode的值被用来确定对象被存储在HashTable类似的结构中的位置。

    所以如果我们重写equals,切记同时也要重写hashCode方法,要满足以下条件:
    • 如果两个对象equals返回true,要求它们的hashCode值一定要相同
    • 如果两个对象equals返回false,那么它们的hashCode值不一定不同
    • 尽量使用对象的同一个属性来确认equals和hashCode方法,比如某个类的id值



    3、写在后面的话

    本来这篇是昨天就写好了的,结果今天打开为知笔记准备发到博客时,傻眼了我靠,笔记内容是白的!去查看历史版本也是白的,啥没有!坑死我了,也是很生气。没办法,就又重新写了一次,幸好这篇内容不多,不过还是有点生气。


  • 相关阅读:
    使用Python创建简单的HTTP和FTP服务
    Xps实现文档显示、套打功能
    时间测试
    微信公众账号 开发教程
    竞赛快速及常用(后续更新)
    第十届蓝桥杯JavaC组省赛真题
    第十届蓝桥杯JavaC组省赛真题
    第十届蓝桥杯JavaC组省赛真题
    C# Winform学习(六)
    C# Winform学习(六)
  • 原文地址:https://www.cnblogs.com/deng-cc/p/7462211.html
Copyright © 2020-2023  润新知