Object类和String类 equals() 方法的区别

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

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

    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”。im

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

    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。由于str四、str5虽然内容相同但它们是不一样的对象,就像两个一样的杯子装着一样多的水,可它们是不一样的,result3为false。而str五、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方法进行了重写。

但愿以上几点对你们有用,共勉。

相关文章
相关标签/搜索