如何比较sb和s
StringBuffer sb= new StringBuffer("Hello");
String s= "Hello";
s.equals(sb.toString())
将结果显示为 false 。
答案 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
}
}