equals()与toString()方法

Java equals()与toString()详解
本文详细介绍了Java中equals()方法与toString()方法的区别及使用场景,包括基本数据类型与引用数据类型的比较方式,equals()方法的手动重写过程,以及toString()方法在对象输出中的作用。

equals()方法

回顾==与equals()的区别

1、== :

是运算符;

可以用在基本数据类型和引用数据类型中;

基本数据类型中,比较的是两个变量存储的值,注意类型自动转换
引用数据类型中,比较的是两个对象的内存地址值

public class Untitled{
	public static void main(String[] args) {
	//基本数据类型
		int a = 65;
		int b = 20;
		double d = 65.0;
		char i = 65;
		char j = 'A';
		System.out.println(a == b);
		System.out.println(a == d);
		System.out.println(a == i);
		System.out.println(i == j);
		System.out.println(a == j);
		//报错: incomparable types: int and boolean
		//boolean c = true ;   
		//System.out.println(b == c);
	
	//引用数据类型
		Test t1 = new Test(10,"a");
		Test t2 = new Test(10,"a");
		System.out.println(t1 == t2);  //false
		String s1 = new String("ab");
		String s2 = new String("ab");
		System.out.println(s1 == s2);  //false
	}
}
class Test{
	int age;
	String name;
	public Test(int age,String name){
		this.age = age;
		this.name = name;
	}
}

2、equals() :

是一个方法;

只适用于引用数据类型;通过对象“点”出来,因为Object是父类

未被重写的equals()方法比较的是对象的内存地址值

在源码StringDateFile、包装类中,都重写了equals()方法,重写以后,比较的就是对象里面保存的值是否相同

class Untitled {
	public static void main(String[] args) {
		Test t1 = new Test(10,"a");
		Test t2 = new Test(10,"a");
		System.out.println(t1.equals(t2));  //false
		
		String s1 = new String("ab");
		String s2 = new String("ab");
		System.out.println(s1 == s2);       //false
		System.out.println(s1.equals(s2));  //true
	}
}
class Test{
	int age;
	String name;
	public Test(int age,String name){
		this.age = age;
		this.name = name;
	}
}

手动重写 equals() 方法

IDEA 是可以自动生成equals()方法的,但是要知道思路

会用到多态操作

public class Test{
	
}
class Customer{
	int age;
	String name;
	
	@Override
	public boolean equals(Object obj){
		if(this == obj){
			return true;
		}
		if(obj instanceof Customer){
			Customer cus = (Customer)obj;
			return this.age == cus.age && this.name == cun.name;
		}
		return false;
	}
}

String类中生成equals()方法

public boolean equals(Object anObject){
	if(this == anObject){
		return true;
	}
	if(anObject instanceof String){
		String anotherString = (String)anObject;
		int n = value.length;
		if(n == anotherString.value.length){
			char v1[] = value;
			char v2[] = anotherString.value;
			int i = 0;
			while(n-- != 0){
				if(v1[i] != v2[i])
					return false;
				i++;
			}
			return true;
		}
	}
	return false;
}

toString()方法

toString`方法是java中用来将对象的哈希值(也即内存地址)打印的方法

当你运行println方法时,会有一个运行toString()方法的过程,会调用该对象所在类中的toString()方法

若没有重写toString()方法,便会调用父类Object中的toString()方法,打印内容为:程序名@hashcode

若已经重写toString()方法,则会调用重写的该方法

class Untitled {
	public static void main(String[] args) {
		//重写`toString()`方法
		System.out.println(new Test2());  //Test2的0 null Test1的
		//没有重写
		System.out.println(new Test3());  //Test3@53d8d10a
	}
}
class Test1{
	public String toString(){
		return "Test1的";
	}
}
class Test2{
	private int a;
	String b;
	Test1 t = new Test1();
	public String toString(){
		return "Test2的"+a+" "+b+" "+t;
	}
}
class Test3{}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值