2012-07-24 31 views
-5

可能重複:
How do I compare strings in Java?在支持Java平等運營商的使用

class StringTest { 
public static void main(String[] args) { 
String str1 = "Hi there"; 
String str2 = new String("Hi there"); 
System.out.println(str1 == str2); 
System.out.println(str1.equals(str2)); 
} 

輸出出來:

      False 
          true 

爲什麼第一輸出是假的即使str1和str2看起來相同?

+6

把它帶上吧,業力禿鷲!這是你一直在等待的那個! – 2012-07-24 12:42:16

回答

6

==比較變量的內容。 (你從intA == intB很清楚這點。)

一個String變量包含參考String對象,所以==會比較引用。

String str1 = "Hi there"; 
String str2 = new String("Hi there"); 

str1str2將指不同字符串對象,從而包含不同的引用,所以str1 == str2將產生false

str1.equals(str2)另一方面將比較str1str2所引用的對象,如您所指出的那樣,將產生true

0

作爲aioobe答案的補充:您應該使用equals方法實際比較對象。如果兩個對象的引用指向相同的內存地址,則對象上的==運算符將進行比較。

0

==比較object reference contentsstr1str2而不是object contentsequals()也比較object contents(objects pointed by str1 and str2)

而且檢查:

String str1 = "Hi there"; 
String str3 = "Hi there"; 

STR1 == STR3 =>真

這是因爲JVM以不同方式處理字符串文字。檢查here

1

因爲如果您使用new運算符它會在內存中創建一個新的引用。

==比較兩個不同對象的引用。

使用等於比較內容。

0

在java中,當您使用new關鍵字創建對象時,它們將在堆中的某個位置創建。

即使創建第三參考變量str3new那麼也將會給比較,如果你參考用假str2

String str1 = "Hi there"; 
String str2 = new String("Hi there"); 
String str3 = new String("Hi there"); 

str2==str3 gives you false 

所以,當你compare的的object的使用equals,而不是reference值。