Object 类
Object类概述
java.lang.Object
类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。
如果一个类没有特别指定父类, 那么默认则继承自Object类。例如:
public class MyClass /*extends Object*/ {
// ...
}
根据JDK源代码及Object类的API文档,Object类当中包含的方法有11个。今天我们介绍其中的2个:
-
public String toString()
:取得对象信息,返回该对象的字符串表示。 -
public boolean equals(Object obj)
:指示其他某个对象是否与此对象“相等”。
toString方法
输出:day0426.Test1@1540e19d
toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。
由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。
再运行代码就不一样了
equals方法
public boolean equals();
指示其他某个对象是否与此对象“相等”
equals():对象比较
String类对象比较 使用的是 equals()方法,实际上String类的equals()方法就是覆写 Object类中的equals()方法
基本数据类型的比较用 == (如: a == 3,b == 4, a == b,比较的是值是否相等)
引用类型数据比较:调用 equals()方法进行比较
用equals( )来比较对象内容是否相同:
两个对象p1和p2的内容明明相等,应该是true呀?怎么会是false?
因为此时直接调用equals()方法默认进行比较的是两个对象的地址。
在源码中,传递来的Object对象和当前对象比较地址值,返回布尔值。
但是,new一下就会在堆上创建新空间,两个对象地址自然不会相同,所以为false。
但是在判断两个对象是否相等时,比如要判断一个Person类的两个对象的姓名是否相同时,此时要重新覆写equals()
比较结果:
所以,引用类型的数据在进行比较时,应该先覆写equals()
方法,不然比较的还是两个对象的堆内存地址值,必然不会相等.
==号和equals方法的区别
“==” 是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值
equals() 方法是一个方法,只能比较引用数据类型,所有的对象都会继承 Object 类中的方法,没有重写 Object 类中的 equals 方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性。