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)