String  s1=new String("abc");
        String  s2=new String("abc"); 
        boolean b1=s1.equals(s2);
        boolean b2=(s1==s2);            
        System.out.print(b1+"   "+b2);   
结果为 true false 
求解释?谢了

解决方案 »

  1.   

    应该好好看基础, 呵呵,
    equals, == 都是比较地址值, 
    所以 new 出来的对象都是不同的
    但是 String 重写了 equals 方法, 所以它比较的是内容是否相同,
      

  2.   

    应该好好看基础, 呵呵,
    equals, == 都是比较地址值, 
    所以 new 出来的对象都是不同的
    但是 String 重写了 equals 方法, 所以它比较的是内容是否相同,
      

  3.   

    String s1 = new string("abc")表示在堆内存里面开辟了个空间放着abc并将这个空间指向栈内存的S1.
    同样,第二句就表示在堆内存中又开辟了一个空间放着abc并将这个空间指向栈内存S2。
    就等于在堆内存中有2个abc分别指向S1和S2.
    而,== 比较的是内存地址。而equals比较的是内容。
      

  4.   

    Strings的equals方法比较的是内容,可以查看api文档
      

  5.   

    equals 比较的是内容,不管你的内存地址是不是相等,如果内容相等就是true
    ==  这个就是内存地址,如果是内存地址相等,内容也相等就是true
      

  6.   

    ==可以用于判断基本数据类型、引用数据类型是否相等,对于基本数据类型来说,如果他们的值一样那就相等了,对于引用数据类型,是比较他们的地址,地址指向同一个位置那就相等了。
    equals方法来说,是用来比较引用数据类型的相等的,不能用来比较基本数据类型是否相等,对于引用数据类型它默认的规则是比较他们的地址指向是一致,如果一致,那就相等,但对于,String、File、Date是比它他们的值,如果值一样就相等,当然,其实,这个equals方法是可以重写的,改变相等的规则,当你重写了equals方法的时候,别忘了也要去重写父类中的hashCode的方法。
      

  7.   

    equals比较内容
    ==比较内存地址
      

  8.   

    equlas比较内容
    ==比较内存地址
    两者是不一样的
      

  9.   

    字符串比较== 说的是字符串表示符new实例化后代表的是地址。1.s1==s2肯定不相等。
                                                            2.声明String s2=s1;这样==就相等了。
    按照C 语言当时的理解如果s1是地址那么修改s1的值就是那个地址的值,那么经过2后s2="bcd";
                                                            3.==再比较不想等了。这里的赋值跟C不同。
                                                               Sting 是对象
                                                            
      

  10.   

    字符串比较== 说的是字符串表示符new实例化后代表的是地址。1.s1==s2肯定不相等。
                                                            2.声明String s2=s1;这样==就相等了。
    按照C 语言当时的理解如果s1是地址那么修改s1的值就是那个地址的值,那么经过2后s2="bcd";
                                                            3.==再比较不想等了。这里的赋值跟C不同。
                                                               Sting 是对象
                                                            
      

  11.   

    字符串比较== 说的是字符串表示符new实例化后代表的是地址。1.s1==s2肯定不相等。
                                                            2.声明String s2=s1;这样==就相等了。
    按照C 语言当时的理解如果s1是地址那么修改s1的值就是那个地址的值,那么经过2后s2="bcd";
                                                            3.==再比较不想等了。这里的赋值跟C不同。
                                                               Sting 是对象
                                                            
      

  12.   

    这关系到数据类型,数据类型分为基本类型和应用类型。
    基本类型有 int  float double  byte  shot  boolean char long 八种类型,
    应用类型就是除了基本类型以外的数据类型,因此可以看出String是属于应用类型
    在应用类型中“==”是比较两个变量的内存地址,内存地址是每new 一次就会生存一个新的。
    而“equals” 则是比较两个变量值
      

  13.   

    比较基础性的问题,equals之比较两个对象的值是否相等,并不判断内存地址是否相同,==则需要判断,s1和s2的值相等,但不是同一个对象,因为都是new String(..)对象的引用,地址自然不一样,所以==不成立。
    和JavaScript类比的话,equals相当于JavaScript里的==,==相当于JavaScript里的===。
      

  14.   

    equals 比较的是内容,不管你的内存地址是不是相等,如果内容相等就是true
    == 这个就是内存地址,如果是内存地址相等,内容也相等就是true
      

  15.   

    String的 equals是比较值,==是比较地址
    --------------------
    http://www.qinglobo.com/qklist-1.htm