2012-05-27 53 views
-3

快速问题CompareTo与Equals!比较字符串或对象?

我比较字符串,我应该用等于或的compareTo? 因为我虽然等于区分String类型 的2个对象,而不仅仅是它们的价值......

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

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

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

什么在性能和精度方面与平等的compareTo实现之间到底有什么不同?

+1

的可能重复的[Java字符串:的compareTo()与equals()方法](http://stackoverflow.com/questions/1551235/java-strings-compa雷托-VS-等于) –

+1

有趣,我怎么弄-6rep而其他人得到+ 41rep –

+0

嗨,你还可以检查此链接在这里http://www.leepoint.net/data/expressions/22compareobjects.html –

回答

9

所有==首先比较了引用,以查看是否两个对象是相同的(所以==是在对象上)。

然后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 */} 
11

你尝试了吗?

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 
+0

有啥区别?在使用equals和compareTo之间? –

+1

@NavySeal - 你有没有读过javadoc? –

+0

是的,但林混淆...如何比较两个对象字符串是不同的? –

-1
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.