java中的字符串反向混淆 - String - StringBulider

时间:2017-08-13 06:53:27

标签: java string stringbuilder

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 条件检查它们是否相同时,它们会打印“不等于”

这真令人困惑,请解释一下。

4 个答案:

答案 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)

StringBuilderString是两个不同的类,因此这些类型的对象永远不会彼此相等,无论其内容如何。

答案 2 :(得分:1)

StringBuilderString是不同的对象,

但是如果你想通过字符串检查等于。只需使用toString()

    if(rev.equals(sb.toString()))
      System.out.println("Equal");
    else
      System.out.println("Not Equal");

答案 3 :(得分:1)

rev是一个字符串。

sb是一个StringBuilder。

它们是两个不同的东西,因此永远不会是平等的。