2012-02-22 106 views
3

該程序執行沒有進入if條件。
請檢查我指定的評論。爲什麼我的條件比較字符串失敗?

public static void filterObject(ArrayList<treewalker.VariableNode> variableNodeslist, 
      ArrayList<treewalker.ObjectNode> objectNodeslist, 
      ArrayList<treewalker.ClassNode> classNodeslist) { 
     int i, j; 
     for (i = 0; i < variableNodeslist.size(); i++) { 
      for (j = 0; j < classNodeslist.size(); j++) { 
       String argu1 = variableNodeslist.get(i).typeClass.toString(); 
       String argu2 = classNodeslist.get(j).name.toString(); 
       System.out.println(argu1); 
       System.out.println(argu2); 
       if (argu1 == argu2)//this if loop is not getting executed 
       { 
        System.out.println("inside for"); 
       } 
       System.out.println("hi"); 
      } 
     } 
    } 

回答

3

簡短的回答:的
argu1.equals(argu2)代替argu1 == argu2


較長的答案:
==運營商在Java中做一個參考比較。

你想要做字符串比較,使用:

if (argu1.equals(argu2)) 


在某些情況下,==運營商似乎做例如平等檢查:

String var1 = "abc"; 
String var2 = "abc"; 

String result = ("abc" == "abc"); 

在這種情況下,結果是true它看起來似乎是一個平等的比較,但事實上是一個編譯器優化,其中var1var2共享相同的參考倫斯。

+0

謝謝。 .. 得到它了... – sarsarahman 2012-02-22 05:50:31

1

使用equals

argu1.equals(argu2) 
+0

謝謝...知道了... – sarsarahman 2012-02-22 05:49:58

1

你應該做的,如果(argu1.equals(argu2))的字符串比較。 ==將比較哈希碼。對於字符串,即使認爲2個字符串包含相同的文本,它們的哈希碼也可能不同。因此,您需要使用equals()來比較字符串文本

+0

謝謝...知道了... – sarsarahman 2012-02-22 05:50:04

1

使用String.equals()來比較您的字符串,而不是==

+0

謝謝...知道了... – sarsarahman 2012-02-22 05:50:16

1

使用if(argu1.equals(argu2))沒有if(argu1==argu2)

你不應該使用==比較字符串。

+0

謝謝...知道了... – sarsarahman 2012-02-22 05:49:39