前言:
在java中,所有类都是有继承关系存在的,都默认继承Object类。当一个类继承了其他父类,它并不会直接继承Object类,但是它的父类若是没有其他继承关系也会默认继承Object类,子类也可以继续调用Object类。
Object类提供着许多方法,但是这些方法在开发过程中往往不能满足程序员想要的功能,一般会对Object类的方法进行重写,以满足功能开发的多样性。
本文介绍常用的tostring方法和equals方法。
toString方法
我们之前打印出整个数组的方法是应用Arrays.ToString方法,若是打印一个对象则可以使用Object自带的toString方法(sout的形式用对象名即可打印)。
先来看一段代码:
我们先定义了一个学生类,可以看见,打印出来的是个地址,但是如果我加上toString方法:
就可以打印出来整个对象。为什么会这样呢?
前面说过,Object类自带的方法往往需要重写才能发挥程序员所需要的功能,我们先看看toString原方法:
默认打印对象时会调用该方法
由图可知,原先的方法是类名 + “@”+ 地址组成的(内部实现可自行查看,按住ctrl+点击),我们通过了重写的方法使得他能够打印出整个对象。当然,也可以在toString方法中任意返回其他值。
如:
equals方法
这是一个比较的方法,一般来说,在使用“==”时,会自动调用equals方法。对于俩测基本类型变量,比较的是值是否相同;对于俩测引用变量,比较的是地址是否相同。如果想要比较对象的内容是否相同,则必须重写该equals方法,否则会按照默认的地址比较方法比较。
equals方法内部:
返回值是boolean类型的,使用引用中的地址进行比较,默认使用“==”来比较时会调用该方法
这是包含地址和基本数据类型的比较,我们可以重写此类方法,检测对象内容是否完全相同:
例如写了三个比较方法,我们使用第三个比较方法,则可得:
equals提供了许多重写方法,我们也可以自定义重写方法,对比较相同对象时提供方便。
总结:
使用方法:类型.equals(类型)
只使用数据类型变量或只比较地址的话直接使用“==”
若是想比较字符串变量或者其他的引用变量则使用equals方法
若想比较对象的属性值时则必须重写equals方法并且使用