如何比较Stringbuffer对象和String对象

时间:2011-12-13 18:04:14

标签: java

如何比较sb和s

StringBuffer sb= new StringBuffer("Hello");
String s= "Hello";

s.equals(sb.toString())将结果显示为 false

5 个答案:

答案 0 :(得分:12)

无法重现:

public class Test {
    public static void main(String[] args) {
        StringBuffer sb= new StringBuffer("Hello");
        String s= "Hello";
        System.out.println(s.equals(sb.toString())); // Prints true
    }
}

如果您认为这两个值真的相同,请发布一个类似的简短但完整的程序来证明问题。我怀疑你会发现问题出在其他地方 - 比如字符串或StringBuffer中的一些不可见的字符。

答案 1 :(得分:1)

对我来说肯定会回归true。由于两个字符串(您创建的String对象和StringBuffer toString()返回的String对象)的内容相同,因此equals()方法不应返回false

答案 2 :(得分:0)

当你在StringBuffer对象上不使用toString()进行比较时,它会给出错误。

像:

     StringBuffer s=new StringBuffer("abc");
     String s1="abc";
     System.out.println("   "+s1.equals(s));

答案 3 :(得分:0)

使用s.contentEquals(sb); 这将有效。

答案 4 :(得分:0)

Equals 和 == 不适用于 StringBuffer 和 String 的比较。

<块引用>

== 仅适用于相同非集合 [整数、字符等] 之间的比较

equals 方法仅适用于相同对象之间的比较 集合 [数组、字符串、对象等]

注意:比较不同集合或非集合会导致错误。

class ClassName{

    public static void main(String[] args) {

        // STRING VS STRING BUFFER

        String strg = "Hello";
        StringBuffer strgBuf = new StringBuffer(strg);

        //if(strg == strgBuf ) //=> error: incomparable types: String and StringBuffer
        
        if(strg.equals(strgBuf)) 
            System.out.println("strg.equals(strgBuf) is true");
        else 
            System.out.println("strg.equals(strgBuf) is false") ;
        //=> strg.equals(strgBuf) is false

        // 2 STRINGS COMPARED
        if(strg.equals(strgBuf.toString())) 
            System.out.println("strg.equals(strgBuf.toString()) is true"); 
        else 
            System.out.println("strg.equals(strgBuf.toString()) is false");
        //=> strg.equals(strgBuf.toString()) is true


        // STRING BUFFER VS STRING BUFFER

        StringBuffer strgBuf2 = new StringBuffer(strg);

        if(strgBuf2 == strgBuf) 
            System.out.println("strgBuf2 == strgBuf is true");
        else 
            System.out.println("strgBuf2 == strgBuf is false") ;
        //=> strgBuf2 == strgBuf is false

        if(strgBuf2.equals(strgBuf)) 
            System.out.println("strgBuf2.equals(strgBuf) is true");
        else 
            System.out.println("strgBuf2.equals(strgBuf) is false") ;
        //=> strgBuf2.equals(strgBuf) is false
        
        // 2 STRINGS COMPARED
        if(strgBuf2.toString().equals(strgBuf.toString())) 
            System.out.println("strgBuf2.toString().equals(strgBuf.toString()) is true");
        else 
            System.out.println("strgBuf2.toString().equals(strgBuf.toString()) is false") ;
        //=> strgBuf2.toString().equals(strgBuf.toString()) is true
        

        // STRING VS STRING

        String strg2 = new String(strg);

        
        if(strg == strg2) 
            System.out.println("strg == strg2 is true");
        else 
            System.out.println("strg == strg2 is false") ;
        //=> strg == strg2 is false

        if(strg.equals(strg2)) 
            System.out.println("strg.equals(strg2) is true");
        else 
            System.out.println("strg.equals(strg2) is false") ;
        //=> strg.equals(strg2) is true
        

    }
}