2010-10-07 50 views
7

何時應該比較String作爲對象,何時應該使用它們的equals方法?爲了確保,我總是使用equals,但這看起來效率不高。在什麼情況下我可以確定string1 == string2是安全使用?Java中的字符串比較和字符串實習

謝謝!

+3

String.equals()是有效的。檢查的第一件事是如果string1 == string2。 (實際上Object.equals()檢查這個。) – 2010-10-07 21:01:26

+0

當然!我多麼愚蠢。這是一個非常明顯的事情要做。如你所說,效率高。從來沒有。 *恥辱我!*謝謝! – 2010-10-07 21:26:45

回答

16

您應該差不多總是使用equals。你可以肯定,如果string1 == string2將工作:

  • 你已經確信你有一些其他的方式(不同的價值觀如您在使用從一組獲取的字符串值,但比較它們的一些其他原因)
  • 你知道你要處理的編譯時間字符串常量
  • 你手動拘禁自己

這真的不會發生字符串很多時候,在我的經驗。

+0

謝謝喬恩,你總是把事情簡單明瞭。 – 2010-10-07 21:28:47

+1

絕對是正確的答案。使用'=='是因爲equals()效率低下是過早優化的一個很好的例子。 – DJClayworth 2010-10-07 21:30:06

+0

而String.intern()在大多數情況下足夠慢以至於無法實現性能。 – Darron 2010-10-07 21:30:09

1

從我所知道的Java中,string1==string2只有在對這些對象的引用相同的情況下才爲真。看看下面的情況

String string1 = new String("Bob"); 
String string2 = new String("Bob"); 

string1 == string2; // false, they are seperate objects 
string1 = string2; // asigning string1 to string2 object 
string1 == string2; // true, they both refer to the same object 
+2

第一次比較* *不會是錯誤的,因爲它們不是*獨立的對象。字符串文字是用Java編寫的。 – sepp2k 2010-10-07 20:53:19

+0

在這種情況下,第一個比較應該返回false- String string1 = new(「Bob」); String string2 = new(「Bob」); – stratwine 2010-10-07 21:01:40

+0

我會編輯我的答覆,使其更清楚地定義。我想我可能會遇到Java的這個問題。 – Anthony 2010-10-07 21:05:16

0

如果您確定對象相同,則只能使用==進行比較。

例如,如果您有最終的靜態字符串變量,則可能發生這種情況。你可以肯定的是,在同一個對象之間進行比較。

堅持用equals進行字符串比較。