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. awk 使用案例

    1.输出占用率超过60%的分区 df -h | awk 'BEGIN{print "Full Partition"}NR>1{gsub("%"," ...

  2. hibernate 一对多 多对一 关系表 增删改查大礼包ps二级查也有

    今天来到混元气功 这货大概的意思就是你中有我 我中有你 ps 这里就要说到维护关系 ps写这个用了我一下午.......也是刚刚好复习到这里 顺便就写写 注意:一般都在多方维护关系,至于是用单向还是用 ...

  3. 新鲜出炉的JSON,拿走不谢!

    一.JSON简介 1.JSON全称是JavaScript Object Notation即JavaScript对象标记法. JSON是一种轻量级(Light-Weight).基于文本的(Text-Ba ...

  4. sysctl -p 报错问题的解决方法

    最近执行sysctl -p 命令时一直报错,类似这种格式: error: permission denied on key...... 经过网上搜索, 原来这些问题都是因为openvz模版的问题,要进 ...

  5. pwnable.kr brainfuck之write up

    I made a simple brain-fuck language emulation program written in C. The [ ] commands are not impleme ...

  6. Django编写RESTful API(六):ViewSets和Routers

    欢迎访问我的个人网站:www.comingnext.cn 前言 在本系列的文章中,我在第一篇和第二篇文章中写的编写Django视图时,使用的都是基于函数的方法,并且每个视图函数之前都会加一个djang ...

  7. linux ls 命令

    ls 命令是 Linux 下最常用的命令之一,用来查询目录下的内容(list directory contents).本文将介绍其基本的用法和一些典型的用例.笔者使用的测试环境为 ubuntu 16. ...

  8. oracle那些基本知识

    Oracle创建表空间.创建用户以及授权 .查看权限 @ rownum 分页查询 它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限 ...

  9. H5性能测试学习

    工欲善其事,必先利其器,在做H5前端性能测试之前,选择合适的工具能让我们的测试工作事半功倍.本文要提到的工具有两类: 一类是抓包工具,如Fiddler.Charles等.这类工具不仅可以抓包,还可以对 ...

  10. adb 安装apk 报错:Failure [INSTALL_FAILED_CPU_ABI_INCOMPATIBLE]

    这是因为系统里缺少了 Google Play 市场等各种谷歌服务应用,其实是因为版权问题,从 2.0 版本开始 Genymotion  提供的虚拟设备都已经移除了 Google Apps  以及 AR ...