java中equal和==的区别

1.值类型和引用类型

值类型:没有equals方法,只有==;

引用类型:使用equals和==两种形式比较;

==操作比较的是两个变量的值是否相等,即是否指向堆内存中的同一对象;equals比较两个变量实际指向的堆中的内容是否相同。

例1:以String类为例,s1,s3指向堆中同一段地址,s2指向堆中另一段地址,但存储的内容和s1,s3相同;

public class EqualTest {
	public static void main(String[] args){
		String s1="lpq";
		String s2=new String("lpq");
		System.out.println(s1.equals(s2));
		System.out.println(s1==s2);
		String s3="lpq";
		System.out.println(s1.equals(s3));
		System.out.println(s1==s3);
	}
}
输出:
true
false
true
true

2.自定义的类
如果是你自己定义的一个类没有覆写euqals方法,那么用equals和==是一样的,都是比较句柄地址,因为自定义的类是继承于object,而object中的
equals就是用==来实现的。若要重新定义两个对象的比较,需要重写equals()方法
例2:使用默认的equals方法,比较两个内容相同的对象

public class EqualTest {
	public static void main(String[] args){
		A a=new A("first");
		A b=new A("first");
		System.out.println(a.equals(b));
		System.out.println(a==b);
	}
}
class A{
	public String s;
	public A(){}
	public A(String s){
		this.s=s;
	}
}
输出:
false
false
例3:覆写equals方法,比较两个内容相同的对象
public class EqualTest {
	public static void main(String[] args){
		A a=new A("first");
		A b=new A("first");
		System.out.println(a.equals(b));
		System.out.println(a==b);
	}
}
class A{
	public String s;
	public A(){}
	public A(String s){
		this.s=s;
	}
	public boolean equals(A a){
		if(this.s.equals(a.s))
			return true;
		else
			return false;
	}
}
输出:
true
false


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值