Java 如何比较Stringbuffer对象和String对象

Java 如何比较Stringbuffer对象和String对象,java,Java,如何比较某人和某人 StringBuffer sb= new StringBuffer("Hello"); String s= "Hello"; s.equals(sb.toString())给出的结果为false无法复制: public class Test { public static void main(String[] args) { StringBuffer sb= new StringBuffer("Hello"); String s= "

如何比较某人和某人

StringBuffer sb= new StringBuffer("Hello");
String s= "Hello";
s.equals(sb.toString())
给出的结果为false

无法复制:

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中的一些不可见字符。

它肯定会为我返回
true
。由于两个字符串(您创建的字符串对象和StringBuffer返回的字符串对象)的内容相同,
equals()
方法不应返回
false
,当您能够在StringBuffer对象上不使用
toString()
进行比较时,它将给出false

比如:

使用
s.contentEquals(sb)

这将起作用。

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
        

    }
}

当我运行你的代码时,它对我来说是真的。你确定你认为正在发生的事情是真的吗?请通过剪切和粘贴张贴你正在使用的实际代码。不要在此处重新键入代码。请尝试使用
equalsIgnoreCase()
,如果为真,则说明其中一个值的大小写有问题。这并不能提供问题的答案。若要评论或要求作者澄清,请在其帖子下方留下评论-您可以随时对自己的帖子发表评论,一旦您有足够的评论,您就可以发表评论。-@mjp66这不提供答案。。。因为??既然你似乎是这个评论队列的新手,请阅读以下内容:@Tom你说得对,我在这里犯了错误。我经常发表一个简短的一句话作为评论。我把它标记为NaA,因为它没有详细说明(我的错误,我认为这些类型的答案是不受欢迎的)。谢谢@mjp66您必须区分“没有答案”(如新问题、垃圾邮件或“谢谢”)和错误答案(不完整或损坏的代码片段;无法解决问题)。第一个需要标志,第二个需要评论和/或否决票。所以在这种情况下:一个关于遗漏解释的评论(可能是否决票)将是正确的“处理”这个问题。顺便说一句:很多人错误地处理答案,所以不用担心,这种情况会发生。这也是很好的阅读:。
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
        

    }
}