CompareTo与Equals!比较字符串或对象?

Nav*_*eal -2 java string string-comparison compareto

快问题

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

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

String a = new String("lol");
String b = new String("lol");
Run Code Online (Sandbox Code Playgroud)

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

在性能和精度方面,equals和compareTo实现之间究竟有什么区别?

Jef*_*rey 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
Run Code Online (Sandbox Code Playgroud)


Mes*_*sop 11

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

然后String.equals()String.compareTo()寻找两个字符串内容的差异的同时验证两个字符串的内容是否相等.

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

String str = "my string";

if ( str.equals("my second string")) {/*...*/}
if ( str.compareTo("my second string")==0) {/*...*/}
Run Code Online (Sandbox Code Playgroud)

但是,因为String.equals首先进行参考检查,所以在使用时是安全的null,同时String.compareTo会抛出NullPointerException:

String str = "my string";

if ( str.equals(null)) {/* false */}
if ( str.compareTo(null) {/* NullPointerException */}
Run Code Online (Sandbox Code Playgroud)