逻辑运营商表现出奇怪的行为

时间:2014-05-30 13:08:51

标签: java logical-operators

if ((File_1[i].ID.equals(File_2[j].ID)) 
&& (File_1[i].Relation.equals(File_2[j].Relation)))

这里的第一个条件,(File_1[i].ID.equals(File_2[j].ID)在假定为真时显示为false。他们都有相同的价值观。

我做错了吗?这很不寻常。

ID: fa001
ID: fa001

这些是比较的前2个变量的值,但它显示为false。

2 个答案:

答案 0 :(得分:3)

原始海报说ID是String类型,String周围有空格。为了删除String s的空格:

s = s.trim();

但是,如果ID是您创建的类型,请确保实施.hashCode()方法。来自Javadocs:

  

如果两个对象根据equals(Object)方法相等,那么   必须在两个对象中的每一个上调用hashCode方法   相同的整数结果。

还要确保从类Object重写.equals(),以便定义新对象类型的值是否相等。

答案 1 :(得分:1)

根据ID的类型(intstringchar[]等),.equals方法可以做一些奇怪的事情。假设它们是字符串,请尝试比较ID.trim(),这将删除ID周围的任何空格。