Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

 

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

我们查看API发现Object类只有一个构造方法。

这下知道为啥万事万物皆对象了吧,因为所有类的最终父类 都是Object类

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

getClass方法我在反射的那篇有讲,此篇会讲解几个常用的方法,余下的会包括在线程那篇进行详细讲解

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

int hashcode()方法         

 返回值是对象的哈希码值,哈希码值:该对象的内部地址值

1.在某次程序执行期间,对统一对象的hashcode()都是打印出相同值

 如果根据equals(object) 方法,两个对象=相等,那么这两个对象调用hashcode()方法得到的hashcode值

一定要相等

2. 如果根据equals(object) 方法,两个对象相等,那么这两个对象调用hashcode()方法得到的hashcode值

一定要相等

3.如果根据equals(object) 方法,两个对象不相等,那么这两个对象调用hashcode()方法得到的hashcode值

不一定要相等。但是我们要意识到,生成不同的整数结果的话有利于提高哈希表的性能

示例为下

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

控制台打印如下

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

 

String toString()  方法

返回值是字符串,组成结构如图 Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

      • 一般来说我们打印toString方法的返回值,结果应该是一个简明扼要的表达,容易让人阅读。 所以,建议所有子类覆盖此方法。

      • 比如学生类我们就可以重载为如下

      • Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

      • 再次打印就是如下形式

      • Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

      • 直接输出一个对象,其实就是输出其toString()方法的返回值

 boolean equals(Object obj) :指示其它某个对象是否与此对象相等

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

打印结果如下

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

equals方法,默认情况下比较的是地址值,一般来说意义不大,所以我们一般要重写为比较其成员变量值

那么怎样重写呢?我们以只有name与age两个属性的Student类为例

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

此时再把s1,s2用equals方法比较,就返回true了,如下

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

优化后如下,此处对代码有所优化,看看就行,以后代码敲多了就懂了,此处不做过多讲解

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

alt+shift+s+s自动生成为equals最终版代码,毕竟大佬写的

 

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

大概意思就是:算了,想弄懂的给你们个网址 https://www.cnblogs.com/Smina/p/7189427.html 这里讲的比较详细

Object clone()方法

返回调用该方法的对象的一个副本

演示如下

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

注意:如以下代码,调用clone方法的对象要实现cloneable,如下

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

 看如下代码,猜猜打印结果:

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)

结果如下:

Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)
结论:对象调用clone方法得到的副本对象的属性跟原对象相同,但是指向内存的地址并不相同。