目录
Object类概述
什么是Object类?Object重要吗?
Object是所有类的父类,不管你写的类有多复杂,它都是Object的子类。Object的身影贯穿你学习Java的整条路线,不可谓不重要。
当你写出这样的代码时:
编译器会给你自动补全为:
只要是类,那么必然有它存在的意义,Object类存在的意义很大程度上就是为了让他的子类们重写它的各种方法,而成员变量?Object没有成员变量。如图可以看到,除了一个static的静态代码块,其他全是标志为m的方法,没有一个成员变量。
所以说,我们的重点就是学习Object的各种方法。
1、hashCode()
为什么要先学hashCode()呢?其实是为了toString()铺垫罢了
hashCode()是将一个对象的地址封装起来返回一个数
他其实是用C++实现的,但是实现过程太过复杂,如果你想深究,请参考这位大佬的博客:Object.hashCode()的实现
2、toString()
如果说,hashCode()是包装地址,那么toString()就是包装hashCode()。
我们调用toString()方法,打印出我们不认识的符号,这就是toString()的作用了。
点进toString()的源码:
你会发现,toString()其实是调用了hashCode()方法,返回一个更加详细的类的信息。
(1554874502的是十六进制是5cad8086)
初学对象时你会不会有这样的疑惑,我写了一个student类,输出它却输出了一大堆符号?
你看它像不像刚刚讲过的toString()方法产生的字符串?
所以我们可以知道,输出一个对象,默认调用toString()方法,你没有重写toString()方法,它就会使用从Object类继承过来的toString(),输出一大串你不认识的符号。
3、equals()
这个方法是比较两个对象是否相等的。
Object类的equals()方法简单粗暴:
管你三七二十一,地址不相等直接就返回不相等。
当我们实现了一个Student类,使用equals()方法时,其实调用了Object的equals()方法,
我们知道,new出来的两个对象一定不相等,所以会出现这种情况:
它们两个分明相等啊,可是输出了false,就是因为你没有自己重写equals()方法
而对于JAVA给我们提供的很多类而言,它们都重写了Object.equals()方法。
例如:String
str1 == str2 直接比较两个对象的地址
str1.equals(str2) 按照你指定的规则比较两个类。
既然是规则,那就是人制定的,所以对于equals()方法,你可以随意玩:
(其实对于新手而言,学到这里已经够了。下面的内容,其他的方法都涉及到接口、反射、线程等)