经典面试题:区分equals和==(超详细讲解)

经典问题: ==和equals的比较

== 是一个比较运算符,既可以判断基本类型,又可以判断引用类型,如果判断的是基本类型,判断的是值是否相等,如果判断引用类型,判断的是地址是否相等(判定是不是同一个对象)

如果忘记基本类型和引用类型可参考我这篇文章JAVA中两种数据类型(基本类型和引用类型)方法传参和对象传参的比较

equals: 是Object类中的方法,只能判断引用类型,默认判断地址是否相等,子类往往重写该方法,用于判断内容是否相等

String str1=new String("hello");//String重写了equals方法
String str2=new String("hello");
System.out.println("str1==str2);//输出结果为false,因为二者是两个不同的对象
System.out.println("str1.equals(str2));//输出结果为true,因为两个字符串值相等

下面一段代码会加深你对equals和==的区别

class Person{//创建一个类
public String name;
}
Person p1=new Person();
p1.name="hello";
Person p2=new Person();
p2.name="hello";
System.out.println(p1==p2); //False,p1和p2是引用类型,==判断引用类型时判断的是地址是否相等(是不是同一个对象)很显然,p1和p2不是同一个对象
System.out.println(p1.name.equals(p2.name));//True,p1.name和p2.name是String类型,equals默认被重写了,所以此时equals比较的是p1.name和p2.name的值是否相等
System.out.println(p1.equals(p2));//false,p1和p2此时未被重写,所以判断的是两者的地址或者说是否为同一个对象,很显然false
String s1=new String("abcd");
String s2=new String("abcd");
System.out.println(s1.equals(s2));//true,s1和s2是String类型,所以比较的是两者的值,都是"abcd"故正确
System.out.println(s1==s2);//false,==判断引用类型比较的是地址或是不是同一个对象,不是同一个地址所以输出false
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一心向上的文浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值