【发布时间】:2017-04-11 14:24:48
【问题描述】:
String s="";
StringBuffer sb2=new StringBuffer("hi");
StringBuffer sb3=new StringBuffer(sb2);
StringBuffer sb4=sb3;
if(sb2.equals(sb3))
{
System.out.println("sb2.equals(sb3):"+sb2.equals(sb3));
s+="2 ";
}
if(sb3.equals(sb4))
{
System.out.println("sb3.equals(sb4):"+sb3.equals(sb4));
s+="3 ";
}
既然 s2,s3,s4 都是 StringBuffer 对象并且 String Buffer 没有 equal() 方法,为什么第一个 if 给出 false 而第二个给出 true?
【问题讨论】:
-
sb2 是在哪里定义的?请给我们minimal reproducible example
-
您还没有向我们展示 sb2 是如何创建的。很可能它是一个单独的对象。但是你已经明确编码了 sb4 = sb3,所以这就是为什么第二部分是正确的。
-
@Jens 这真的重要吗?
sb3仍然是一个新对象,不管sb2是如何创建的。 -
@m0skit0 是的。要验证它,您必须拥有它
-
@Jens
StringBuffer sb3=new StringBuffer(sb2); sb2.equals(sb3)将始终为 false,无论 sb2 是如何创建的。
标签: java stringbuffer