我有一个整数数组列表的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完全匹配。我哪里错了?
答案 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转换为其他类型?