Java ==和equals的区别:是否比较地址值

首先我们要比较的是引用类型。

==比较的是引用类型对象在内存中存放的地址。准确的说是堆内存中的地址。

而equals是基类Object自带的方法,我们写的每个类都会有这个默认的方法,你可以重写它也可以不重写。代码是:

 

也就是说当我们自己写的类,我们没有重写equals方法时,equals等同于==。

我们来看下一个小demo:

class A{
	int a=0;
	public A(int a)
	{
		this.a=a;
	}
	
}

public class Test {

	public static void main(String[] args) {
		
		
		A a1=new A(1);
		A a2=new A(1);
		System.out.println(a1==a2);
		System.out.println(a1.equals(a2));
	}	

结果:

false
false
原因:因为没有重写equals方法,所以equals等同于==。

我们来打印下它们的地址:(当没有重写toString方法的时候可以这么打印它们的地址)

	System.out.println(a1);
	System.out.println(a2);

结果:

Chapter_one_02.A@6d06d69c
Chapter_one_02.A@7852e922

(正常来说,你们的结果和我的不一样,但是我们需要知道的是,第一个地址和第二个地址不一样就行了,所以是false。)

 

然后我们再来看另一种情况:

String s1=new String("a");
String s2=new String("a");
System.out.println(s1==s2);
System.out.println(s1.equals(s2));

结果:

false
true
 

那么在这里为什么equals是true呢?创建两个对象,地址肯定不一样。

是因为String重写的equals方法,我们来看下String类的equals方法:

因为它重写了equals方法,所以在调用equals方法的时候,就不等同于==。

 

我们不能直接打印它们的地址,因为String类重写了toString方法。

总结:如果类没有重写equals方法,那么equals等同于==。

如果重写了,equals就不等同于==。

在eclipse中 鼠标方法方法名上,ctrl+ t,就可以看到源码。

如果发生Source not found ,参考:https://blog.csdn.net/qq_36743482/article/details/78622343

 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值