我在比较代码下方folderInfoData.getFolderInfoRecord().getInfoCode()
和map.get("infoCode")
时遇到问题。请给value=2
但我的问题是它不会进入if
条件。
以下是示例:
if (folderInfoData.getFolderInfoRecord().getInfoCode().equals(map.get("infoCode"))) {
showNotification(pageResourceBundle.getText("MSG_SAME_INFO_ALREADY_EXISTS"));
return;
}
在我用谷歌搜索它之前对我不起作用:Comparing Integer objects vs int
任何人都可以告诉mehow可以解决这个问题吗?
由于
答案 0 :(得分:3)
在评论中,您声明map
已宣布为Map<String, Object>
。这可能就是问题所在。
当您致电map.get("infoCode")
时,您将获得Object
。
如果:
Object
实际上是Integer
folderInfoData.getFolderInfoRecord().getInfoCode()
正在返回Integer
Integer
包含相同的值然后这个:
if (folderInfoData.getFolderInfoRecord().getInfoCode()
.equals(map.get("infoCode"))) {
评估为true
。
所以要么它们是两个Integers
,要么两个都不包含相同的值,或者它们是不同类型的对象并且不相等。 (或者,“infoCode”在地图中不存在,并且它正在返回null
)
答案 1 :(得分:2)
如果您想使用.equals()
,最好的方法是确保始终返回Integer
而不是int
int num1 = Integer.parseInt(folderInfoData.getFolderInfoRecord().getInfoCode());
int num2 = Integer.parseInt(map.get("infoCode"));
if (new Integer(num1).equals(new Integer(num2))) {
showNotification(pageResourceBundle.getText("MSG_SAME_INFO_ALREADY_EXISTS"));
return;
}
答案 2 :(得分:1)
您必须检查两者是否都是具有正确值的Integer实例,这是通过相等性测试。当两个Integer值相同时,测试肯定会通过。请调试您的代码并找出答案。将其更改为==
无效。
答案 3 :(得分:0)
如果返回String
if (Integer.parseInt(folderInfoData.getFolderInfoRecord().getInfoCode()) == Integer.parseInt(map.get("infoCode"))) {
showNotification(pageResourceBundle.getText("MSG_SAME_INFO_ALREADY_EXISTS"));
return;
}
其他
if (folderInfoData.getFolderInfoRecord().getInfoCode() == map.get("infoCode")) {
showNotification(pageResourceBundle.getText("MSG_SAME_INFO_ALREADY_EXISTS"));
return;
}
试试这也是
if (folderInfoData.getFolderInfoRecord().getInfoCode().toString.trim().equals(map.get("infoCode").toString().trim())) {
showNotification(pageResourceBundle.getText("MSG_SAME_INFO_ALREADY_EXISTS"));
return;
}
答案 4 :(得分:-1)
似乎您正在将int与Integer进行比较。 Java会自动将Integer转换为int
所以
int a = 2;
Integer b = a;
System.out.println(a == b);
变为
int a = 2;
Integer b = new Integer(a);
System.out.println(a == b.valueOf());
所以如果你想使用equals,请参阅Rafa El回答。否则你可以使用==
。