Object类——toString、equals

20 篇文章 0 订阅

toString

关于Object中的toString方法
SUN在Object类中设计toString方法的目的:返回java对象的字符串表示形式
在现实的开发过程中,Object中的toString方法已经不够用了,Object中的toString方法实现的结果不满意,这个方法就是要被重写的
Object中的toString方法返回:类名@java对象的内存地址经过哈希算法得出的int类型值再转化成十六进制。
输出结果可以等同看作java对象在堆中的内存地址
重点:print方法后面括号中如果是一个引用类型,会默认调用引用类型的toString方法
Date对象中的toString方法已经被重写,输出当前时间

测试方法

public class Test {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建一个object类型的对象
		Object o1 = new Object();
		
		//调用toString方法
		String ostr = o1.toString();
		
		System.out.println(ostr);
		
		//创建一个Person类型的对象
		Person p1 = new Person("麦麦",18);
		//调用toString类型方法
		String pstr = p1.toString();
		System.out.println(pstr);
		
		//print方法后面括号中如果是一个引用类型,会默认调用引用类型的toString方法
		Person p2 = new Person("zjm",18);
		System.out.println(p2);	
	}
}

Person对象

public class Person {
	String name;                
	int age;                    
	
	//构造函数	
	public Person() {
		super();
	}

	public Person(String name,int age) {
		this.name = name;           
		this.age = age;             
	}
	
	//重写toString方法
	//根据项目需求重写
	//假设需求规定,显示格式:Person[name = 刘德华,age = 50]
	public String toString(){
		return"Person[name = " + this.name + ",age = " + this.age + "]";
	}
}

equals

关于Object中的equals方法:
Object中的equals方法:
public boolean equals(Object obj){
return (this == obj);
}

"=="两边如果是基本数据类型【byte short int long double ……】,则比较内容是否相等,引用类型【String】,则比较内存地址,地址相同则是true,不同为false

Object中的equals方法比较的是两个引用的内存地址

Java对象中的equals方法的设计目的:判断两个对象是否一样

测试类:
测试一:Object中的equals方法比较的是内存地址,与内容无关。

public class test {
	public static void main(String[] args) {
		Object o1 = new Object();
		Object o2 = new Object();
		//测试1:创造两个相同的对象调用equals并输出结果
		//测试结果:Object中的equals方法比较的是内存地址,与内容无关。
		boolean b1 = o1.equals(o2);
		System.out.println(b1);//输出false
		
		//测试二:在Star类中重写equals方法,使其能够比较变量值
		Star s1 = new Star(100,"麦麦");
		Star s2 = new Star(100,"麦麦");
		
		System.out.println(s1.equals(s2));//输出true
	}
}

测试类2
关于java语言中如何比较两个字符串是否一致
在java中比较两个字符串是否一致,不能用"",String为引用数据类型,不能用""。
只能调用String类的equals方法
String已经重写了Object中的equals方法,比较的是内容。

public class Test02 {
	public static void main(String[] args) {
		String s1 = new String("ABCD");
		String s2 = new String("ABCD");
		
		System.out.println(s1 == s2);//比较内存地址 false
		
		//String已经重写了Object中的equals方法,比较的是内容。
		System.out.println(s1.equals(s2));//true
	}
}

Star类

public class Star {
	int id;
	String name;

	//Object中的equals方法比较的是内存地址
	//在现实的业务逻辑中,可能需要比较内容,
	//根据需求规定重写equals方法,需求规定:若身份证号一致,名字一致,则代表是同一个人
	public boolean equals(Object obj){//父类型引用指向子类型对象
		if(this == obj) {//如果内存地址相同则内容也必然完全相同
				return true;
			}
		//内存地址不同则比较内容
		//需要调用子类特有属性,则要进行强制类型转换
		//强制类型转换格式
		if(obj instanceof Star){
			Star s = (Star)obj;
			
			if(id == s.id && name.equals(s.name)/*比较字符串*/){//String类中的equals方法已被重写,比较的是内容
				return true;
			}
		}	
		return false;
	}
	
	//构造方法
	public Star() {
		super();
	}
	public Star(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
}

知识点总结:
Object类中的equals方法默认比较的是引用的内存地址
String类中的equals方法已被重写,比较的是内容
"=="只能比较基本数据类型
重写equals方法的格式

public class Test{
	public boolean equals(Object obj){
		if(this == obj){
			return true;
		}
		if(obj instanceof Test ){
			Test t = (Test)obj;
			if(this.id == t.id && this.name.equals(obj.name)){
				return true;
			}
		}
		return false;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值