我有2个LIST标记和和弦。他们人口充足。但是当我尝试比较2时,尽管在循环中单独打印时打印相同的字符串内容,但它们总是会产生错误值。任何想法/解决方法?
System.out.println(token.get(i).toString().equals(chords.get(j).toString()));
两者都声明为List并初始化为ArrayList();
两者都包含String对象。
while (i < tokenLength) {
System.out.println("");
int j = 0;
while (j < numberOfChords) {
System.out.println(token.get(i).toString() + " compares "
+ chords.get(j).toString());
System.out.println(token.get(i).toString()
.equals(chords.get(j).toString()));
if (token.get(i).toString() == chords.get(j).toString()
&& token.get(i).toString().length() <= maxLengthOfChord) {
foundChord.add(token.get(i));
}
j++;
}
i++;
}
给出以下输出:
我也试过这个
System.out.println(token.get(i).toString().equals(chords.get(j).toString()));
它总是产生一个错误,返回与屏幕截图
中显示的相同的结果答案 0 :(得分:2)
到目前为止,你做的一切都是正确的:
if (token.get(i).toString() == chords.get(j).toString()
您需要使用equals
方法,而不是==
答案 1 :(得分:1)
不能说为什么它打印错误,但这是明确错误的:
if (token.get(i).toString() == chords.get(j).toString()
将该行更改为
if (token.get(i).trim().equals(chords.get(j).trim())
Equality(equals())与identity(==)不同。
答案 2 :(得分:1)
这将比较引用而不是值。
token.get(i).toString() == chords.get(j).toString()
你必须这样做:
token.get(i).toString().equals(chords.get(j).toString())
答案 3 :(得分:1)
我不确定你目前的代码究竟是什么问题,但我帮你简化了一下......
for (String t : token) {
for (String c : chords) {
System.out.println(t + " compares " + c);
System.out.println(t.equals(c));
if (t.equals(c)) {
foundChord.add(t);
}
}
}
如果我正确理解它,你应该做你当前代码试图实现的目标,它应该没有错误。
答案 4 :(得分:0)
toString()将打印对象的哈希码。对于所有对象,此哈希码是唯一的,因此它永远不会与其他对象的哈希码匹配比较它们时结果为false(即使对象相似)。您需要覆盖toString()方法以获得预期的结果。可能是你可以从toString方法返回实例变量的值