问答详情
源自:2-2 Java 中字符串的不变性

==和equals()方法

之前讲到对比两个对象的内存地址是可以用equals()方法或者==的

但为什么String对象用equals()方法只能对比内容而不能对比内存地址呢?

提问者:奶尤糯米团子 2020-02-19 16:54

个回答

  • 慕仔8386201
    2020-05-05 17:55:23

    String 中的equals 方法是被重写的 如果不理解  你可以去直接看一下源码 你就会找到了

  • 慕粉1039238650
    2020-03-05 11:21:06

    因为String类中的euqals方法就是重写的

  • mushji
    2020-02-22 16:49:55

    String Str1=new String("runoob");和String Str1="runoob";的区别在于:String Str1=new String("runoob")是在堆中创建一个对象(也可以理解为新的地址)然后将常量池中的runoob付给创建的对象(地址)最后将对象(地址)从堆中付给栈中的Str1,由于在堆中创建了新的地址所以将原来栈中的地址代替掉,String Str1="runoob"是直接从堆中的常量池中取将runoob值直接赋给栈中的地址。

  • 奶尤糯米团子
    2020-02-21 08:52:49

    但是之前讲到比较两个对象的时候,用的equals()方法比较得是两个对象的地址是否相同呀,重写的equals()方法才是比较内容呀?

    而且想请教一下String Str1=new String("runoob");和String Str1="runoob";的区别在哪呀?new String("runoob")这里面的runoob是参数吗?那String的有参构造方法是系统自带的吗?

  • 慕村9360347
    2020-02-19 22:13:29

    equals()方法不是比对地址,是字符串与指定对象进行比较

    public class Test {   
     public static void main(String args[]) { 
         String Str1 = new String("runoob");    
        String Str2 = Str1; 
       String Str3 = new String("runoob");    
       boolean retVal;        
       retVal = Str1.equals( Str2 );       
       System.out.println("返回值 = " + retVal ); 
        retVal = Str1.equals( Str3 );   
       System.out.println("返回值 = " + retVal );  
         }
          }