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. ==和equals()的区别

    简单的一句话说明就是: == 比较Stack中的值(引用数据类型stack中存放的是对象的堆内存地址). equals() 通常被覆写为比较对象的值 那么==和equals()之间到底有什么具体的区别 ...

  2. CentOS7 搭建Git服务器(转)

    1.在服务器上创建一个新用户 adduser git 2.创建一个Git仓库 cd /data/git //切换到希望创建工作区的目录git init --bare sample.git //创建一个 ...

  3. Wdatepicker日期控件的使用指南 (转)

    Wdatepicker日期控件的使用指南 标签: inputclass语言functionstring正则表达式 2012-02-10 15:48 40826人阅读 评论(5) 收藏 举报 .embo ...

  4. ASP.NET CORE 2.0 不小心踩得坑

    前言 我是跟着 https://github.com/FQLin/Docs 学习asp.net core 2.0 的 1.EF迁移 EF 的迁移方式有两种: Command-line interfac ...

  5. vue-cli脚手架npm相关文件解读(4)utils.js

    系列文章传送门: 1.build/webpack.base.conf.js 2.build/webpack.prod.conf.js 3.build/webpack.dev.conf.js 4.bui ...

  6. DOM 对象方法

    DOM 对象方法 这里提供一些您将在本教程中学到的常用方法: 方法 描述 getElementById() 返回带有指定 ID 的元素. getElementsByTagName() 返回包含带有指定 ...

  7. tensorflow笔记(五)之MNIST手写识别系列二

    tensorflow笔记(五)之MNIST手写识别系列二 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7455233.html ...

  8. 标准的Java编码规范手册

    编码规范体现出一个开发者的基本素质,良好的编码规范可以提高团队编码的效率,避免很多不必要的问题.今天分享一个标准的Java编码规范给大家,希望对于大家今后的开发工作带来帮助. 编码规范的意义      ...

  9. 【Linux部署 · GIT】在linux系统安装git和配置实现SSH

    领导给了一个不开放ftp的测试库,让我部署项目.拿到一个全新的环境,真是个练手的好机会. 该操作系统为:CentOs release 6.5(Final) 由于不开放ftp,所以上传下载代码是非常麻烦 ...

  10. 通过css控制超链接不显示下划线

    “页面属性”——“链接”——“下划线样式”——“始终无下划线” <style type="text/css"> a:link { text-decoration: no ...