-1

快速提问

我正在比较一个字符串,我应该使用 equals 还是 compareTo?因为我虽然 equals 区分了 2 个 String 类型的对象,而不仅仅是它们的值......

这可能会导致问题,因为:

String a = new String("lol");
String b = new String("lol");

即使它们具有相同的值,它们是两个不同的对象吗?

就性能和精度而言,equals 和 compareTo 实现之间到底有什么区别?

4

3 回答 3

12

你试过了吗?

String a = new String("foo");
String b = new String("foo");

System.out.println(a == b); // false
System.out.println(a.equals(b)); // true
System.out.println(a.compareTo(b)); // 0
于 2012-05-27T14:08:25.923 回答
12

首先==比较引用以查看两个对象是否相同(对象上也是如此==)。

然后在求两个字符串内容的差异的String.equals()同时验证两个字符串内容的相等性。String.compareTo()

所以以下两个测试是等价的:

String str = "my string";

if ( str.equals("my second string")) {/*...*/}
if ( str.compareTo("my second string")==0) {/*...*/}

但是,由于String.equals首先进行参考检查,因此在针对 使用时是安全的null,而String.compareTo将抛出NullPointerException

String str = "my string";

if ( str.equals(null)) {/* false */}
if ( str.compareTo(null) {/* NullPointerException */}
于 2012-05-27T14:13:58.327 回答
-3
    String a = new String("lol");
    String b = new String("lol");

    System.out.println(a == b); // false. It checks references of both sides operands and we have created objects using new operator so references would not be same and result would be false.
    System.out.println(a.equals(b)); // true checks Values and values are same
    System.out.println(a.compareTo(b)); //  checks for less than, greater than or equals. Mainly used in sortings.
于 2012-05-28T06:16:49.173 回答