什么是比较StringBuilder对象的有效方法

use*_*389 21 java

我有两个StringBuilder对象,我需要在Java中比较它们.我知道我能做的一种方式是

sb1.toString().equals(sb2.toString());
Run Code Online (Sandbox Code Playgroud)

但这意味着我正在创建两个String对象,有没有更好的方法来比较StringBuilder对象.可能你不需要创建其他对象的东西?

Ern*_*ill 37

正如你显然已经知道,StringBuilder继承equals()java.lang.Object,因此StringBuilder.equals()返回true,只有当通过了相同的对象作为参数.它没有比较两个StringBuilders 的内容!

如果你查看源代码,你会得出结论,最有效的比较(不涉及创建任何新对象)将比较.length()返回值,然后如果它们相同,则比较charAt(i)每个的返回值字符.

  • 不,绝对,完全,完全**不是.** (20认同)
  • @jjm永远不要假设其他人的代码写得合情合理;) (5认同)
  • @jim - 一旦你被这样的事情所困扰,你就永远不会忘记,*并且你将生命的努力付诸实践,以拯救他人免受同样的折磨*! (4认同)

Zhe*_*lov 7

从Java 11开始StringBuilder实现Comparable,所以你可以使用一个compareTo方法进行相等性测试:

System.out.println(sb1.compareTo(sb2) == 0);
Run Code Online (Sandbox Code Playgroud)