如果语句在for循环中

时间:2012-04-22 19:02:10

标签: java

我有一个整数数组列表的arraylist和一个名字的arraylist。当它与特定名称对应时,我想向其中一个整数arraylists添加一个数字,并为每个其他arraylist添加0。我认为我所拥有的应该是有效的,但它只是在所有内容中添加了0,并且在名称正确时忽略了特殊情况。 “Rating”是一个整数,“user”是一个字符串。 “名字”是字符串的arraylist。语言是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);
            }   

我的语法有问题吗?当我插入打印行时,我发现我的名字arraylist和我的allratings arraylist完全匹配。我哪里错了?

5 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:5)

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

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

将Java中的字符串与==进行比较将比较引用,这可能不是您想要的。似乎引用是不同的,即使它们具有相同的字符串。这就是为什么你的条件总是返回false。您想要比较字符串的实际值。这是通过.equals()完成的。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

string1.equals(string2);

答案 4 :(得分:0)

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