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. 记录git常用操作命令

    GIT的常用操作 0.写在前面 作为一名开发者,熟悉使用 git 代码管理工具是一项必备的基本技能.git 相较 SVN 而言,其优点不言而喻.git 的功能非常强大,其包括的操作命令也非常的多,但是 ...

  2. 【教程】webstorm的破解以及汉化

    安装包以及汉化包的下载(大小151M): 链接:http://pan.baidu.com/s/1hsA5GUS 密码:roui 破解: 正常安装的webstorm是要注册码的,这里教你免费使用的方法, ...

  3. R的数据图形

    R支持4种图形类型: base graphics, grid graphics, lattice graphics,  ggplot2. Base graphics是R的默认图形系统. 一.  基本图 ...

  4. MVC项目中使用百度地图

    已经很久没更新博客了,因为最近一直在学习前端的知识,没那么多时间,写博客或者写文章不但没有钱,写得好还好说,如果写得不好,一些吃瓜群众,不仅要喷你,搞不好还要人身攻击就不好了.所以写博客的人,脸皮得厚 ...

  5. node里面的c/c++模块

    准备工作 node使用c++插件时需要使用node-gyp包,node-gyp把c++源码编译为二进制文件,js在调用二进制文件,编译后的二进制文件模块调用就和js的模块调用一样. npm insta ...

  6. navicat for mysql只导出数据表结构(转)

    选中需要导出表结构的数据库,右键,在显示的菜单中选择"数据传输"这一项 ,在弹出窗口中"数据传输"单击选择"高级"一项,在"高级& ...

  7. 【Centos7】Delete virtual bridge

    Previously,Stop service which controls virtual bridges. sudo systemctl stop libvirtd.service #System ...

  8. CNAME关联githubPage域名及中文域名,创建个人网站

    对于前端开发来说,部署一个自己的个人网站部署服务器等比较麻烦,如果只是做静态页面的展示GitHubPage完全够用,而且有300M免费的空间,完全满足需求. 首先你要有GitHubPage项目,具体怎 ...

  9. 线性代数-矩阵-【3】矩阵加减 C和C++实现

    点击这里可以跳转至 [1]矩阵汇总:http://www.cnblogs.com/HongYi-Liang/p/7287369.html [2]矩阵生成:http://www.cnblogs.com/ ...

  10. jquery的2.0.3版本源码系列(6):2880-3042行,回调对象,对函数的统一管理

    目录 1 . 回调对象callbacks的演示 回调的使用有一点像事件绑定,先绑定好,等到有点击事件或者其他时就触发. <script src="js/jquery-2.0.3.js& ...