Java自学随笔 - Object类 - toString()和equals()

什么是Object类?

这个类是java中所有类的父类,任何一个类都会去默认继承object中的方法,就算没有直接继承,最终也会间接继承。

常用Object类中的方法,如何寻找?

方式一:去源码中查找。
方式二:去查阅java的类库的帮助文档。

记录几个常用的方法:

pretected object clone()
int hashCode()
boolean equals(object obj)
String toString()
protected void finalize()

重点分析toStringequals这两个方法

toString()方法的作用和目的:

源码实现:

public String toString(){
	getClass().getName() + '@' + Interger.toHexString(hashCode());
}

作用:可以把一个java对象转换成字符串的形式,以文本的方式来表示这个对象。
目的:使得java对象不再是一个抽象的字符串地址,而是以可阅读的方式存在。
PS:建议所有子类都重写此方法
Example Code:
在这里插入图片描述
红框内便是重写的toString方法,和源码相比,我们也很显而易见的看到区别。下面是打印结果
在这里插入图片描述
注意:在打印输出的过程中
写成"t1"和"t1.toString"没有区别,可以省略不写,结果是一样的。


equals()方法的作用

源码:

public boolean equals(Object obj){
	return (this == obj);
	//Object类的默认实现
}

作用:判断两个对象是否相等。
疑问:基本数据类型的比较相等和引用数据类型比较相等有什么区别么?

int a = 100;
int b = 100;
System.out.println(a == b);
//a,b两个变量中储存的值做比较,即比较的是具体的数值。
A a = new A();
B b = new B();
System.out.println(a == b);
/*a,b这两个变量中存储的是堆内存中实际对象的内存地址的值,而不是
比较实际对象是否相同,所以是不存在这种比较方式。
*/

所以如果我们需要去对比两个对象是否相同,我们需要使用其他方法来实现。
所以我们需要重写equals()方法。如何重写呢?思路如下

第一,要知道任何类在创建的时候,都是Object类的子类,所以会默认继承Object类中几乎所有的方法,所以Object类中默认的equals()方法,也会被子类继承过来。那么,当我们没有对子类中的equals方法进行重写时,那么子类实例化对象去调用equals方法的时候,就会调用由Object这个根类继承过来的默认equals方法。

第二,既然equals是一个方法,那么就可以通过实例化一个对象去调用它,所以就可以有"引用.equals()",然后遵循方法的重写规则:“相同的方法名,返回值类型相同,形式参数列表相同”。所以回看默认的equals方法的参数列表中是需要传参数的,即"Object obj",那么我们就把另一个对象的引用给传进来进行对比,即:引用A.equals(引用B) 正好这也是多态的应用

第三,很显然通过第二点我们可以发现,默认的equals方法,和目前要比较两个对象已经不适用了,所以我们需要将方法体内的代码进行重写。
那么则有:
在这里插入图片描述
其中也用到了,强制类型转换,强制类型转换判断这两个知识点,使用debug模式可以清楚的看到代码逻辑。
当然,也可以使用idea自动生成对比代码。
上述代码我们是对比的两个对象中包含的属性,而且这些属性是基本数据类型,那么如果某一个类中含有引用数据类型的属性则如何做比对呢?
For Example:

class{
	int no;
	String school
	public Student(){
	}
	public Student(int no , String school){
		this.no = no;
		this.school = school;
	}
	//重写toString方法
	public String toString(){
		return "学号" + no + ",所在学校名称" + school;
	}
	//重写equals方法
	//需求:当一个学生的学号相等,并且学校相同时,表示同一个学生。
}

上述代码中:类中有一个String类型的school属性,这是一个引用数据类型,所以我们需要对比的是实际对象中的属性是否一致,那么代码如下:
在这里插入图片描述
运行结果:
在这里插入图片描述

总结

toString()方法

以后所有类的toString()方法是需要重写的。重写的规则,越简单越明了最好。
System.out.println(引用);这里会自动调用"引用"的toString()方法。
String类有Sun公司编写,该类中的toString方法已经重写。

equlas()方法

基本数据类型比较适用:==
对象和对象的比较:调用equlas方法
String类有Sun公司编写,所以String类的equlas方法重写了、
以后判断两个字符串是否相等,最好不要使用双等号,要调用字符串对象equlas方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值