【问题标题】:why doesn't my if/else statement match when the output of both is the same?当两者的输出相同时,为什么我的 if/else 语句不匹配?
【发布时间】:2013-12-05 02:53:13
【问题描述】:
        List6 = new ArrayList<String>();
        List6.add(driver.findElement(By.xpath(".//*[@name='authorName']")).getAttribute("value"));
        System.out.println("List6 : " +List6);
        System.out.println("List1 : " +List1.get(u));
        if (List1.get(u).equals(List6)){
            System.out.println("author name checked!");
        } else {
            System.out.println("wrong author name!");
        }

为什么它总是用 else 语句返回我?我打印的清单 6 和 1 都给了我相同的回报

这是结果

List6 : [alan]
List1 : alan
wrong author name!

我的列表 1 数组

[alan, ben, chris, dawn, eva, fann, grace, helen, ian, jag, ken, lyn, stephen]
for (int u = 0; u < List1.size(); u++) {
            System.out.println(List1.get(u));

【问题讨论】:

  • 因为[alan]alan 不等价?

标签: java list if-statement arraylist return-value


【解决方案1】:

String 类上的equals() 方法是对两个字符串的内容进行逐字符比较。

就在您进行此比较之前,您将打印出字符串,任何人都可以很容易地看到它们非常不同。您输入if else 块的else 部分的原因是因为if (List1.get(u).equals(List6)) 始终评估为假。

[alan]alan 不是等效字符串,使用 .equals() 比较时,它们将返回 false

【讨论】:

  • 哦,好吧,现在我明白了.. 有什么办法可以解决这个问题吗?
  • 没有什么可以解决的...equals() 方法正在按预期工作。如果您的意思是要去掉括号,那么您应该将 List1.get(u)List6 中的单个元素进行比较,而不是与整个列表进行比较(这会将列表表示为逗号分隔并用方括号括起来)。跨度>
  • 所以我应该将我的整个列表 1 与列表 6 iszit 进行比较?哦好的明白了!现在明白了!谢谢!
  • 不...在这种情况下,您应该将列表 1 的单个元素与列表 6 的单个元素进行比较。List1.get(u).equals(List6.get(0))
  • [alan] 根本不是字符串。它是一个包含字符串的 ArrayList。当格式化为打印时(通过隐式的toString() 调用),它会像这样显示。
【解决方案2】:

List1.get(u) 是一个字符串。
List6 是一个 ArrayList。
String 永远不会等于 ArrayList

也许你需要改变你的代码如下:

if (List1.get(u).equals(List6.get(0))){
        System.out.println("author name checked!");
    } else {
        System.out.println("wrong author name!");
    }

【讨论】:

    猜你喜欢
    • 2016-02-16
    • 2019-11-26
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 2017-08-25
    相关资源
    最近更新 更多