2017-06-21 111 views
1

我试图在NetBeans下面的代码,我收到的产值为false 我想确实知道如何equal()作品。equals()方法如何在字符串缓冲区中工作?

我的代码是:

StringBuffer x=new StringBuffer("Hey"); 
StringBuffer y=new StringBuffer("Hey"); 
System.out.println(x.equals(y)); // my output was false 
+0

StringBuffer的不覆盖等于(即它是比较参考) –

回答

0

StringBuffer不会覆盖Object.equals方法,所以它不执行字符串比较。相反,它正在执行直接对象比较。您的条件可能是if(s1==s2)。如果你想比较字符串,你需要首先将缓冲区变成字符串。

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/StringBuffer.html

编辑:我假设我们在Java世界。如果您处于单线程环境中,或者您的缓冲区被隔离为单个线程,则应该使用StringBuilder而不是StringBuffer

Does the StringBuffer equals method compare content?

+2

而不是发布链接作为答案,你应该已经标记为重复的问题。无论如何,链接只有答案不是很好的答案。 – Guy

+0

感谢您的建议,我会从现在开始。 – Amit

1

试想一下,在源代码*

你会看到,它只是调用Objectequals

public boolean equals(Object obj) { 
    return (this == obj); 
} 

还要考虑使用StringBuilder看到Difference between StringBuilder and StringBuffer

*如果使用Eclipse的对象,如果编码源中加载CTRL单击你的系统,它会带你到那里

0

你比较对象,而不是字符串。而那些并不平等。 在两个Stringbuffers上调用toString()并比较结果字符串。

0

只是将天气比较两个对象equale为“本”或不 例如 自反性:对于任何非空的参考值x,x.equals(x)应返回true

+0

为您的答案添加一些参考代码或示例以提供可读性。 – CodeChanger