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
}
}