快速提问
我正在比较一个字符串,我应该使用 equals 还是 compareTo?因为我虽然 equals 区分了 2 个 String 类型的对象,而不仅仅是它们的值......
这可能会导致问题,因为:
String a = new String("lol");
String b = new String("lol");
即使它们具有相同的值,它们是两个不同的对象吗?
就性能和精度而言,equals 和 compareTo 实现之间到底有什么区别?
快速提问
我正在比较一个字符串,我应该使用 equals 还是 compareTo?因为我虽然 equals 区分了 2 个 String 类型的对象,而不仅仅是它们的值......
这可能会导致问题,因为:
String a = new String("lol");
String b = new String("lol");
即使它们具有相同的值,它们是两个不同的对象吗?
就性能和精度而言,equals 和 compareTo 实现之间到底有什么区别?
你试过了吗?
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
首先==
比较引用以查看两个对象是否相同(对象上也是如此==
)。
然后在求两个字符串内容的差异的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 */}
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.