Object类概述及其常用方法详解(toString与equals的重写,hashcode,finalize,clone)
我们查看API发现Object类只有一个构造方法。
这下知道为啥万事万物皆对象了吧,因为所有类的最终父类 都是Object类
getClass方法我在反射的那篇有讲,此篇会讲解几个常用的方法,余下的会包括在线程那篇进行详细讲解
int hashcode()方法
返回值是对象的哈希码值,哈希码值:该对象的内部地址值
1.在某次程序执行期间,对统一对象的hashcode()都是打印出相同值
如果根据equals(object) 方法,两个对象=相等,那么这两个对象调用hashcode()方法得到的hashcode值
一定要相等
2. 如果根据equals(object) 方法,两个对象相等,那么这两个对象调用hashcode()方法得到的hashcode值
一定要相等
3.如果根据equals(object) 方法,两个对象不相等,那么这两个对象调用hashcode()方法得到的hashcode值
不一定要相等。但是我们要意识到,生成不同的整数结果的话有利于提高哈希表的性能
示例为下
控制台打印如下
String toString() 方法
返回值是字符串,组成结构如图
一般来说我们打印toString方法的返回值,结果应该是一个简明扼要的表达,容易让人阅读。 所以,建议所有子类覆盖此方法。
比如学生类我们就可以重载为如下
再次打印就是如下形式
直接输出一个对象,其实就是输出其toString()方法的返回值
boolean equals(Object obj) :指示其它某个对象是否与此对象相等
打印结果如下
equals方法,默认情况下比较的是地址值,一般来说意义不大,所以我们一般要重写为比较其成员变量值
那么怎样重写呢?我们以只有name与age两个属性的Student类为例
此时再把s1,s2用equals方法比较,就返回true了,如下
优化后如下,此处对代码有所优化,看看就行,以后代码敲多了就懂了,此处不做过多讲解
alt+shift+s+s自动生成为equals最终版代码,毕竟大佬写的
大概意思就是:算了,想弄懂的给你们个网址 https://www.cnblogs.com/Smina/p/7189427.html 这里讲的比较详细
Object clone()方法
返回调用该方法的对象的一个副本
演示如下
注意:如以下代码,调用clone方法的对象要实现cloneable,如下
看如下代码,猜猜打印结果:
结果如下:
结论:对象调用clone方法得到的副本对象的属性跟原对象相同,但是指向内存的地址并不相同。