在东方神话体系中,人类是如何来的? 是女娲用泥土捏出来的。 在西方神话体系中,人类是如何来的? 是亚当夏娃的后代。 今天要学的Object类在Java里面,就好比是和亚当夏娃一样的存在。 只不过神话终归只是神话,是虚无缥缈的,但是计算机里面,Object类是真真实实存在的。 Object类是所有类的根类,顶层父类,就可以理解成是所有类的祖先,也就是说所有的类最终都会继承至它,包括数组的父类,也是Object类。 用代码证明: ①getClass():得到类名。 ②getSuperClass():得到父类名。 ③Class是指类,java.lang这是Java里面的一个包,类名是Object。 所以数组的父类也就是Object.。 如果一个类没有特别指定父类,那么默认继承自Object类。 既然Object类是顶层父类,那么按照继承的规则:子类可以调用父类的方法。 Object类中的方法,所有类都可以使用。Object类当中包含的方法有11个。 今天主要学习其中的2个: 一、Object类的toString方法①创建Person类,没有指定父类,那它默认继承Object类。 ②在测试类main方法中,创建对应的person对象并初始化。 ③调用toString()方法并打印(注意:Person类中并没有定义toString()方法,它调用的是父类Object的方法)。 ④打印结果为一串字符,前面一大串是我自己在开发工具里面创建的包名,就可以理解成文件夹:
那么Person@16e8e0a这串字符到底啥意思呢,这就要看下Object类中的toString()方法是啥样的了。 下图为Object类的toString()方法: ①getClass().getName():得到类的名字,类名是Person。 ②Integer.toHexString(hashCode()):hashCode得到的是一个地址值,将这个地址值转化成十六进制,也就是说16e8e0a是一串16进制的数字。 好,现在问题来了,对于开发者来说,地址是没多大的意义的,我们需要的是你能以字符串的形式展现出来而不是给我一串地址。 前面学过String类,知道它打印出来就是一串字符串,而不是一串地址,怎么做到的? 因为它将方法重写了。 下图为String类的toString()方法 String类的父类是Object类,它将父类的toString方法重写了。 所以,当我们新建一个类的时候,一般都会将toString()方法重写,因为地址对于开发者来说意义不大,我们需要的是字符串。 利用开发工具快捷键,Alt+Insert,会自动帮重写toString()方法。 二、Object类的equals方法作用:判断其他某个对象是否与此对象“相等”。 提到equals方法,不得不提到一个比较运算符“==”。 “==”的作用是啥? ①如果比较的是基本数据类型 “==”比较的是值是否相等。 ②如果比较的是引用数据类型 “==”比较的是引用地址是否相同。 那equals方法和“==”之间有什么区别呢? 下图为Object类的equals()方法: Object类中的equals()方法就是运算符“==”,它们是一回事。 类是引用数据类型,所以Object类中的equals()方法,比较的是引用地址是否相同。 那么问题又来了,String类中的equals方法为何比较的是值是否相等呢? 因为它将equals方法重写了。 所以,同toString方法一样,当我们新建一个类的时候,一般都会将equals方法重写。 利用开发工具快捷键,Alt+Insert,会自动帮重写equals方法。 三、Objects工具类Objects是Object的工具类,前面也学习过Arrays类是数组的工具类。 工具类有个特点:方法一般都是静态方法。 方法可以直接用类名调用,不用创建实例对象。 ①直接用Objects工具类类名就可以调用方法。 ②Objects中的equals方法。 ③这种判断方式更加安全,不会出现空指针异常。 什么叫空指针异常呢? 就是如果一个对象为空,它调用方法就会出现空指针异常。 如下图: object1为空,调用equals方法就会报错,如果是用Objects类的方法: Objects.equals(object1,object2) 这样写就不会出现空指针异常。 总结: |
|
来自: 刘小爱v > 《Java学习笔记》