2012-05-10 104 views
2

可能重複:
How do I compare strings in Java?== vs .equals - 爲什麼不同的行爲?

我爲這個簡單的問題,對不起。 我有這個非常簡單的Java程序:

public class ArgIt { 
    public static void main(String[] args){ 
      if(args[0].equals("x")) System.out.print("x"); 
      if(args[0] == "x") System.out.println("x2 "); 
    } 
} 

如果我調用的程序>的java ArgIt X 只打印一個x。 在其他情況下,爲什麼程序不會在字符串上確認==?

+4

我期待四個以上的答案 – dragon66

+0

檢查字符串實習 - http://en.wikipedia.org/wiki/String_intern_pool。第二個條件失敗,因爲兩個字符串對象不相同,因此引用不相同,==返回false。 – 2012-05-10 14:14:35

+0

http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.21 – hmjd

回答

6

在Java中,您必須使用equals()來比較String之間的相等性。 ==測試身份,一個不同的概念。

兩個對象可以相等但不相同;另一方面,如果兩個對象是相同的,則暗示它們是平等的。

如果物理指向內存中的相同地址,則兩個對象相同,而如果兩個對象具有相同的值(如equals()方法中的程序員所定義),則這兩個對象相同。一般來說,你更關心的是找出兩個對象是否相等。

+0

那麼對於給出的例子哪個選項是合適的 –

+0

字符串應該等於等於運算符? String x =「X」; x ==「X」應該評估爲true。 – maress

+0

@maress你的例子恰好符合你的期望。 – assylias

3

==指針相等的測試;存在.equals以測試價值相等。

0

在Java中,與==運算符相比,運算符會檢查標識符是否相等,如引用(在對象的情況下)指向相同的內存位置。正因爲如此,只有基元應該使用==運算符進行比較,因爲基元(int,long,boolean等)是按值存儲而不是按引用存儲的。

總之,使用equals方法比較對象,並使用==運算符比較基元。

相關問題