equals方法和“==”的区别及String和Object中的equals方法的区别

"=="在Java中这个表示的是比较两个对象是否为同一个对象,即存储的地址是否相同,所以:

String str1 = new String("abc");

String str2 = new String("abc");

如果是str1 == str2得到结果就是false,因为虽然是str1跟str2字符串的内容一样,但不是同一个对象;

Object的equals方法本质上与"=="是一些样的,因此如果有一个方法:

boolean check(Object o1,Object o2){

return o1.equals(o2);

}

把str1和str2传入这个方法得到的结果就是false,因为Object的equanls也是比较两个对象本身是否一样;

但如果有另一个方法:

boolean check(String str1,String str2){

return str1.equals(str2);

}

再把str1和str2传入这个方法得到的结果就是true,因为String的equals也是比较两个对象的内容是否一样;

这是因为String类继承Object后重新了equals方法;

参考:

https://www.cnblogs.com/tiantianxiangshangg/articles/5190080.html

原文如下:

相信很多学习过Java的同学都知道,在比较两个String对象的内容是否相同时是使用equals方法的

如:String str1=new String(“A”);

    String str2=new String(“B”);

    String str3=new String(“B”);

    boolean result1= str1.equals(str2);

    boolean result2= str2.equals(str3);

    System.out.println(result1);

    System.out.println(result2);

则输入的result1为false,result2为true。因为str1与str2的内容不相同,而str2与str3内容相同都是“B”。

 

而在String类中使用“==”时,比较的是两个String对象的引用是否指向同一个对象,如

    String str4=new String(“B”);

    String str5=new String(“B”);

    String str6=str5;

    boolean result3=(str4==str5);

    boolean result4= (str5==str6);

    System.out.println(result3);

    System.out.println(result4);

则输入的result3为false,result4为true。因为str4、str5虽然内容相同但它们是不同的对象,就像两个同样的杯子装着同样多的水,可它们是不同的,result3为false。而str5、str6是指向同一个String对象的,所以result4为true。

再说明一点,String str = new String("abc")和String str ="abc"是有一点小区别的,对于new出来的String对象,是每new一个内存里生成一个,也就是说其允许存在内容相同的重复对象。而String str ="abc"这种形式是不允许存在内容相同的重复对象,只要内存已经存在了,就不再新生成,而是把新的引用指向原来的对象。

 

以上是String类equals方法和"=="的区别和联系。下面再说说Object类的equals方法。

大家首先要明确一点Object类是所有Java类的父类,所有的Java类都要继承Object类,所以通常我们写程序的时候不显式声明继承Object类,而是默认继承Object类。

在Object类的equals方法的本质其实是和“==”一样的,都是比较两个对象引用是否指向同一个对象(即两个对象是否为同一对象)。那为什么String类的equals方法却又是比较两个String对象的内容是否相同呢?

原来是这样的,String类继承Object类后,也继承了equals方法,但String类对equals方法进行了重写,改变了equals方法的比较形式。其实很多其他类继承Object类后也对equals方法进行了重写。

希望以上几点对大家有用,共勉。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值