此程序执行未进入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");
}
}
}
答案 0 :(得分:3)
简答:
argu1.equals(argu2)
代替argu1 == argu2
更长的回答:
Java中的==
运算符执行引用比较。
您想要进行字符串比较,请使用:
if (argu1.equals(argu2))
在某些情况下,==
运算符似乎可以执行相等检查,例如:
String var1 = "abc";
String var2 = "abc";
String result = ("abc" == "abc");
在这种情况下,结果是true
,它看起来似乎是一个相等比较,但实际上是编译器优化,其中var1
和var2
共享相同的引用。
答案 1 :(得分:1)
使用equals
argu1.equals(argu2)
答案 2 :(得分:1)
你应该做if(argu1.equals(argu2))进行字符串比较。 ==将比较哈希码。对于字符串,即使2个字符串包含相同的文本,它们的哈希码也可能不同。因此,您需要使用equals()来比较字符串文本
答案 3 :(得分:1)
使用String.equals()
来比较您的字符串,而不是==
。
答案 4 :(得分:1)
使用if(argu1.equals(argu2))
而不是if(argu1==argu2)
您绝不应该使用==
来比较字符串。