1、基本概念

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



2、常用方法

2.1 toString

toString可以将任何一个对象转换为字符串返回,返回值的生成算法为:
getClass().getName() + '@' + Integer.toHexString(hashCode()) 
 
1
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、写在后面的话

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


[04] Object类的更多相关文章

  1. Java基础12:深入理解Class类和Object类

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  2. java基础18 String字符串和Object类(以及“equals” 和 “==”的解析)

    一.String字符串 问:笔试题:new String("abc")创建了几个对象?答:两个对象,一个对象是 位于堆内存,一个对象位于字符串常量池 class Demo17 { ...

  3. Object类和常用方法

    Object类是java语言的根类,要么是一个类的直接父类,要么就是一个类的间接父类.所有对象(包括数组)都实现这个类的方法. 引用数据类型:类/接口/数组,引用数据类型又称之位对象类,所谓的数组变量 ...

  4. JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法

    相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...

  5. Object类clone方法的自我理解

    网上搜帖: clone()是java.lang.Object类的protected方法,实现clone方法: 1)类自身需要实现Cloneable接口 2)需重写clone()方法,最好设置修饰符mo ...

  6. Java中的Object类介绍

    Object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object类. Object类中的所有方法适用于所有子类 Object中比较常见的方法: ...

  7. Object类的toString方法

          Object类是所有Java类的祖先.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法.在不明确给出超类的情况下,Java会自动把Object作为要定义类的超类 ...

  8. Yii2的深入学习--yii\base\Object 类

    之前我们说过 Yii2 中大多数类都继承自 yii\base\Object,今天就让我们来看一下这个类. Object 是一个基础类,实现了属性的功能,其基本内容如下: <?php namesp ...

  9. 重写Object类中的equals方法

    Object是所有类的父亲,这个类有很多方法,我们都可以直接调用,但有些方法并不适合,例如下面的student类 public class Student { //姓名.学号.年纪 private S ...

随机推荐

  1. MySQL用户管理:添加用户、授权、删除用户

    文章首发于[博客园-陈树义],请尊重原创保留原文链接. 添加用户 以root用户登录数据库,运行以下命令: create user zhangsan identified by 'zhangsan'; ...

  2. CSS层级关系

    http://www.blogbus.com/eskimo-logs/69626018.htmlhttp://www.dmtuan.com/?p=574

  3. 第3天:CSS浮动、定位、表格、表单总结

    今天学的是浮动.定位.表格.表单等内容,这些是CSS中最容易混淆的知识,有许多小技巧在写代码过程中需要注意.下面是主要知识点: 一.float浮动1.块元素在一行显示2.内联元素支持宽高3.默认内容撑 ...

  4. dotnet使用Selenium执行自动化任务

    如果要做百度文库,百度贴吧,百度知道签到,你,会怎么做?前不久我还会觉得这好像太麻烦了,now,soeasy. 自动化测试工具:Selenium Selenium是一个用于Web应用程序测试的工具.S ...

  5. Win7怎么显示文件的后缀名

    Win7怎么显示文件的后缀名.. --------------- -------------- --------------- -------------- --------------- ----- ...

  6. Mybatis 插入数据并返回刚刚插入的数据id

    1.在Mybatis Mapper文件中添加属性“useGeneratedKeys”和“keyProperty”,其中keyProperty是Java对象的属性名,而不是表格的字段名. 2.Mybat ...

  7. 递归调用里的性能问题(js)

    说明 这是在codewars.com上刷的一道js练习题,在此做个记录 问题描述 The Fibonacci sequence is traditionally used to explain tre ...

  8. 九天学会Java,第二天,算术运算

    算术运算 先回顾上次我们提到的编程特性 变量和数据类型,赋值和输出 算术运算 选择结构 循环结构 函数定义,函数调用 变量作用域 栈,程序运行的基石 面向对象 异常处理 语言提供的公用包 第一天我们讲 ...

  9. “最美天气”Python抓取天气

    import urllib.request import urllib.parse import json """     利用"最美天气"抓取即时天 ...

  10. LF模式是个坑,ZeroIce中间件让你体会这个痛

    LF模式是个坑,一个小小的失误就可能使你的网络处理瘫痪,Ice就很好地展现了出来,换句话说,Ice中间件或是LF模式就是一个坑,如果你一不小心. LF模式的官方论文中,论述了此模式用于高性能网络并发模 ...