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;
	}
}

运行结果:

重写Object类的toString和equals方法-LMLPHP

可以看到u1和u2两个内存地址不同的对象,里面的内容一样时,返回的是true,证明两个用户是一个人

10-25 04:19