Object类

Object类

所有类的父类,如果一个类没有显式地继承类,则默认父类Object

例如,下面这个两个类的定义相等

class God{}
class God extends Object{}

Object中方法

例如

public String toString() 		返回描述该对象的字符串

public Boolean equals(Object o)  比较两个对象是否相等

public int hashCode() 			 返回对象的哈希值

toString方法

返回输入的字符串属于的类名、内存地址

结果格式:

该对象所属的类名@内存地址(十六进制)

package test1;

class Person{
	private String name;
	private int age;
	public Person(String name,int age){
		this.name = name;
		this.age = age;
	}
}

public class Class1 {
public static void  main(String[] args){

Person o = new Person("XiaoMing",18);

System.out.println(o.toString());
System.out.println(o);
//从结果中发现,直接打印对象和打印toString()的返回值相同,
}}
test1.Person@3ac3fd8b
test1.Person@3ac3fd8b

重写toString()

对象的输出一定会调用Object类中的toString()方法

通常,重写这个方法,来返回对象的具体的信息

public String toString(){
	return "Person[name=" + name + ", age =+ age +""]";
}
package test1;

class Person{
	private String name;
	private int age;
	public Person(String name,int age){
		this.name = name;
		this.age = age;
	}
	//在Person类中修改
	public String toString(){
		return "Person [ name = " + name + ", age = " + age + " ] ";
	}
}

public class Class1 {
public static void  main(String[] args){


Person o = new Person("XiaoMing",18);
System.out.println(o.toString());
System.out.println(o);
//结果再次一致 —— 程序调用的是,重写后的toString()

}}
Person [ name = XiaoMing, age = 18 ] 
Person [ name = XiaoMing, age = 18 ] 

这是多态机制

equals()方法

测试两个对象是否相等

package test1;

class Person{
	private String name;
	private int age;
	
	public Person(String name,int age){
		this.name = name;
		this.age = age;
	}

//自定义比较方法,用于检查两个引用变量是否指向同一对象ai
	public boolean myEquals(Object o ){
		return (this == o);
	}
}


public class Class1 {
public static void  main(String[] args){

	Person o1 = new Person("ZhangSan",18);
	Person o2 = new Person("ZhangSan",18);
	
//调用对象的equals方法
	System.out.println(o1.equals(o2));
//调用自定义的myEquals方法
	System.out.println(o1.myEquals(o2));
/
}}

false
false
//

结果

equals()方法与定义的方法直接使用 == 结果相同

因为,equals()默认实现就是: 用==运算符检测两个引用变量是否指向同一对象,即比较的是地址

如果要检测两个不同对象的内容是否相同——重写equals(方法)

例如,String类中的equals()方法继承自Object类并且重写

是指能够检验两个字符串的内容是否相等

修改Person 类 添加重写的equals()

package test1;

class Person{
	private String name;
	private int age;
//创建构造方法,要输入两个参数,有name、age
	public Person(String name,int age){
		this.name = name;
		this.age = age;
	}
	public boolean equals(Object o) {
		if(this == o)
			return true;
		if(!(o instanceof Person))
			return false;
	Person p = (Person) o;
	
//一个个地比较属性 看是否相等
	if(((null == name && null == p.name)||(null != name && name.equals(p.name)))&& age == p.age)
		{return true;}
		return false;
	}
	
//自定义比较方法,用于检查两个引用变量是否指向同一对象ai
	public boolean myEquals(Object o ){
		return (this == o);
	}
}


public class Class1 {
public static void  main(String[] args){


	Person o1 = new Person("ZhangSan",18);
	Person o2 = new Person("ZhangSan",18);
	//调用对象的equals方法
	System.out.println(o1.equals(o2));
	//调用自定义的myEquals方法
	System.out.println(o1.myEquals(o2));

}}

true
false

在Person类中重写了equals()方法:首先按比较地址是否相等,如果相等,就是同一对象

因为equals的形参是Object类型,所以可以接受任何对象。。

帮助判断对象是否是Person的实例,如果是,一次比较各个属性

posted @ 2021-11-24 16:01  Dinesaw  阅读(35)  评论(0编辑  收藏  举报