-1

我有一个整数数组列表和一个名称数组列表。当它与特定名称对应时,我想将某个数字添加到其中一个整数数组列表中,并为每个其他数组列表添加一个 0。我认为我所拥有的应该可以工作,但它只是在所有内容中添加一个 0 并在名称正确时忽略特殊情况。“评分”是一个整数,“用户”是一个字符串。"Names" 是一个字符串数组列表。语言是Java。

for(int i = 0; i<names.size(); i++)
            {   

                if (names.get(i)==user)

                    allratings.get(i).add(rating);

                if (names.get(i)!=user) 

                    allratings.get(i).add(0);
            }   

我的语法有问题吗?当我插入打印行时,我发现我的 names 数组列表和我的 allratings 数组列表完全匹配。我哪里错了?

4

5 回答 5

8

User 是一个字符串,在 Java==中不用于字符串比较,因为它比较的是引用(或指针,如果您愿意)而不是字符串的文本内容。采用:

if (names.get(i).equals(user))
于 2012-04-22T19:11:52.883 回答
5

.equals()在 Java 中比较字符串时使用:

if (user.equals(names.get(i)))

比较 Java 中的字符串 with==将比较引用,这可能不是您想要的。似乎引用是不同的,即使它们包含相同的字符串。这就是为什么您的条件总是返回错误的原因。您想比较字符串的实际值。这是用.equals().

于 2012-04-22T19:11:22.130 回答
2

注意==比较引用。通常,由于 Java 维护的字符串字面量池,如果比较引用,可能会返回true. 如果您创建 aString s = "test"和 another String s2 = "test",由于字符串池(这是 Java 优化),它们都将指向同一个引用,因此 return true。但是,不要这样做。安全使用.equals()

于 2012-04-22T19:20:43.423 回答
1

像这样比较字符串在 Java 中是行不通的;因为它们指向内存中的不同位置。要解决此问题,请先尝试intern()它们(这将使它们指向内存中的相同数据),或使用如下方法equals()

string1.equals(string2);
于 2012-04-22T19:14:18.990 回答
0

看起来相等测试失败了(这就是为什么 != 每次迭代都成功)。如果 'names.get(i)' 和 'user' 的值看起来相同,则可能是类型不同;这些值之一是否需要对不同类型的 CAST?

于 2012-04-22T19:06:25.847 回答