Object作为祖宗类,里面的toString和equals方法,我们在调用时基本上会重写。
一般在我们创建对象的时候,会声明个引用指向这个对象,我们打印这个引用,输出的是一串字符串,其实就是调用了toString方法,我们可以看下toString的源码:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
这个返回值就是 包名类名@16进制的地址 这样一个字符串,我们可以拿过来直接重写,等下看代码
还有equals方法也是,我们看下源码:
public boolean equals(Object obj) {
return (this == obj);
}
this指的是当前对象,obj是一个应用,这个返回值比较的就是两个引用的地址是否相同,相同返回true
比如我们创建一个类,有姓名和年龄的一个用户类,我们想打印对象引用的时候,出现的是对象的姓名和年龄,然后可以通过引用比较两个用户是否是一个人,不是比较引用的地址,而是当用户的姓名与年龄都一样时,我们就认为是一个人,这时就可以重写方法来实现这个功能
public class UserTest04 {
public static void main(String[] args) {
User u1=new User("张飞",41);
User u2=new User("张飞",41);
System.out.println(u1);
System.out.println(u2);
System.out.println(u1.equals(u2));
}
}
class User{
String name;
int age;
public User(String name, int age) { //带参构造器
super();
this.name = name;
this.age = age;
}
public String toString() { //重写toString方法
return name+age+"岁"; //返回值是个字符串,当前对象的姓名加年龄
}
public boolean equals(Object obj) { //重写equals方法
if(obj instanceof User) { //obj判断是否是User的对象,向下转型
User u=(User)obj;
return (this.name).equals(u.name) && this.age == u.age; //分别比较姓名和年龄
}
return false;
}
}
运行结果:
可以看到u1和u2两个内存地址不同的对象,里面的内容一样时,返回的是true,证明两个用户是一个人