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

时间:2012-06-13 02:16:18

标签: java

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

sb1.toString().equals(sb2.toString());

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

5 个答案:

答案 0 :(得分:34)

正如您显然已经知道的那样,StringBuilderequals()继承java.lang.Object,因此StringBuilder.equals()仅在与参数传递相同的对象时才返回true。它比较两个StringBuilder的内容!

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

答案 1 :(得分:6)

由于Java 11,StringBuilder实现了Comparable,因此您可以使用compareTo方法进行相等性测试:

System.out.println(sb1.compareTo(sb2) == 0);

答案 2 :(得分:3)

两个StringBuilder对象永远不会相等。使用.toString()获取两个对象的字符串表示形式,然后使用.equals()来比较对象。这样调用String类中的equals()方法,比较对象的字符串值,而不是比较内存位置。

StringBuilder a= new StringBuilder("HELLO JAVA");
StringBuilder b= new StringBuilder("HELLO JAVA");
if (a.toString().equals(b.toString())){
System.out.println("Objects are equal");
}

答案 3 :(得分:1)

没有新分配的解决方案是首先按长度进行比较,如果不同,则逐个字符进行比较。这比在 StringBuilder 调用上通过 toString() 执行比较更有效、更快,后者会分配一个新字符串。

下一个片段假设两个参数都不是空的,也不是同一个对象实例:

public boolean compare(final StringBuilder left, final StringBuilder right) {
    final int length = left.length();

    if (length != right.length())
        return false;

    for (int index = 0; index < length; index++) {
        if (left.charAt(index) != right.charAt(index))
            return false;
    }

    return true;
}

答案 4 :(得分:-3)

您可以使用String的contentEquals()方法。

StringBuilder s = new StringBuilder("abc");
StringBuilder t = new StringBuilder("def");

if(s.contentEquals(new String(t)) {
    System.out.println("Same");
}