class strb
{
static public void main(String...string)
{
StringBuilder s1 = new StringBuilder("Test");
StringBuilder s2 = new StringBuilder("Test");
System.out.println(s1);
System.out.println(s2);
System.out.println(s1==s2);
System.out.println(s1.equals(s2)); //Line 1
System.out.println(s1.toString()==s2.toString()); //Line 2
if(s1.toString()==s2.toString())System.out.println("True"); //Line 3
}
}
输出是
Test
Test
false
false
只是对.equals有一个简单的问题。
不管对象内容如何,.equals
仅当两个对象引用都指向同一对象时才返回true吗?
编辑 :现在我了解有关的部分,.equals
但是为什么2号线和3号线也不会返回true
?
编辑 :我相信==
看参考变量的地址,因此s1和s2不能相等。如果我的假设不正确,请纠正我
是,,StringBuilder does not override Object's .equals() function
这意味着两个对象引用不同,结果为false。
对于StringBuilder
,您可以使用s1.toString().equals(s2.toString())
为了进行编辑,您要==
在两个不同的String对象上调用运算符。==
由于对象不同,操作员将返回false。要比较字符串,您需要使用String.equals()
或String.equalsIgnoreCase()
这是你之前遇到的同样的问题