2012-10-14 63 views
1

可能重複:
How do I compare strings in Java?關於比較兩個字符串

我新的編程,而且我用java。這裏是我寫的一個程序:

class HelloApp { 

    static String hi; 

    public static void main(String[] args) { 
     int length = args.length; 
     if (length > 0) { 
      hi = args[0]; 
      sayHi(); 
     } 
    } 

    static void sayHi() { 
     if (hi == "hello") { 
      System.out.println("Hello!"); 
     } 
    } 
} 

我的問題是:爲什麼不輸入「java HelloApp hello」make「Hello!」出現在下一行?

+2

Java需要.equals()方法進行String類相等性測試。 ==用於比較兩個類是否引用相同的數據。 – Scooter

+0

這是爲什麼遷移到程序員?在SO ..上有十億個「比較java中的字符串」線程? – Thousand

+0

您可能會接受答案... – maxhax

回答

11
if (hi == "hello") { 

應該是:

if (hi.equals("hello")) { 

==檢查是否兩個引用都指向在堆相同的對象,而equals()檢查是否兩個String引用指向對象具有相同的字符串值。

+0

感謝您的幫助。 – Andrew0085

+0

+1,100 100 Ya Man! – NoChance

+0

使用FindBugs,[您可以自動檢測這些錯誤](http://findbugs.sourceforge.net/bugDescriptions.html#ES_COMPARING_STRINGS_WITH_EQ) –

3

你是在一個錯誤的方式比較字符串...

How do I compare strings in Java?

static void sayHi() { 
    if (hi.equals("hello")) { 
     System.out.println("Hello!"); 
    } 
} 

這應該解決您的問題..

3

==測試參考平等,不串平等。你想用.equals代替:

if (hi.equals("hello")) { 
    ... 
} 
3

你被錯誤地比較String秒。檢查字符串相等的正確方法是通過str.equals(anotherStr)str.equalsIgnoreCase(anotherStr)==運算符檢查字符串是否指向相同的內存位置,而不是內容。