String str="inputstring";
StringBuilder sb=new StringBuilder(str);
String rev=sb.reverse().toString();
//System.out.println(sb+" "+rev); //this prints the same reverse text
if(rev.equals(sb))
System.out.println("Equal");
else
System.out.println("Not Equal");
当我打印此代码时,StringBuilder和String打印的输出与“gnirtstupni gnirtstupni”相同,但是当我使用 if 条件检查它们是否相同时,它们会打印“不等于”。
这真令人困惑,请解释一下。
答案 0 :(得分:3)
您正在比较 String 和 StringBuilder 对象。这永远不会导致相等的结果! StringBuilder当前包含与某些字符串相同的内容这一事实并不重要!
换句话说:假设你在一个盒子里有一个鸡蛋和一个鸡蛋。是那个盒子(含有一个鸡蛋)"等于"到那个蛋?!
理论上,StringBuilder
类可以@Override equals()
方法来专门检查它是否等于另一个字符串。但这会让人感到困惑。因为如果你这样做,你最终得到:
new StringBuilder("a").equals("a") // --> true
给出与以下不同的结果:
"a".equals(new StringBuilder("a")) // --> false
最后:StringBuilder
使用从java.lang.Object继承的equals()
实现。而这个实现只是做了一个"这= =其他"校验。
答案 1 :(得分:1)
StringBuilder
和String
是两个不同的类,因此这些类型的对象永远不会彼此相等,无论其内容如何。
答案 2 :(得分:1)
StringBuilder
和String
是不同的对象,
但是如果你想通过字符串检查等于。只需使用toString()
if(rev.equals(sb.toString()))
System.out.println("Equal");
else
System.out.println("Not Equal");
答案 3 :(得分:1)
rev
是一个字符串。
sb
是一个StringBuilder。
它们是两个不同的东西,因此永远不会是平等的。