比较java中的int值?

比较java中的int值?,java,object,map,integer,int,Java,Object,Map,Integer,Int,我在比较代码下面的folderInfo.getFolderInfo记录().getInfoCode()和map.get(“infoCode”)时遇到了一个问题。两者都给出了value=2,但我的问题是它没有进入if条件内部 下面是一个例子: if (folderInfoData.getFolderInfoRecord().getInfoCode().equals(map.get("infoCode"))) { showNotification(pageResourceBundl

我在比较代码下面的
folderInfo.getFolderInfo记录().getInfoCode()
map.get(“infoCode”)
时遇到了一个问题。两者都给出了
value=2
,但我的问题是它没有进入
if
条件内部

下面是一个例子:

if (folderInfoData.getFolderInfoRecord().getInfoCode().equals(map.get("infoCode"))) {
         showNotification(pageResourceBundle.getText("MSG_SAME_INFO_ALREADY_EXISTS"));
          return;
    }
在我谷歌搜索之前,它对我无效:

有人能告诉我如何解决这个问题吗

谢谢

您必须检查这两个实例是否都是具有正确值的整数实例,即是否通过了相等性测试。当两个整数值相同时,测试肯定会通过。请调试您的代码并找出答案。将其更改为
==

是没有用的,您必须检查这两个实例是否都是具有正确值的整数实例,以便通过相等性测试。当两个整数值相同时,测试肯定会通过。请调试您的代码并找出答案。如果它返回字符串,则将其更改为
==

是没有用的

if (Integer.parseInt(folderInfoData.getFolderInfoRecord().getInfoCode()) == Integer.parseInt(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;
    }
如果它返回字符串

if (Integer.parseInt(folderInfoData.getFolderInfoRecord().getInfoCode()) == Integer.parseInt(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;
    }

如果要使用
.equals()
,最好的方法是确保它总是返回
整数,而不是
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;
}

如果要使用
.equals()
,最好的方法是确保它总是返回
整数,而不是
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;
}

似乎您正在将int与整数进行比较。Java会自动将整数转换成整数

所以

变成

int a = 2;
Integer b = new Integer(a);
System.out.println(a == b.valueOf());

所以,如果你想使用equals,请参阅Rafa El答案。否则您可以使用
==

似乎您正在将int与整数进行比较。Java会自动将整数转换成整数

所以

变成

int a = 2;
Integer b = new Integer(a);
System.out.println(a == b.valueOf());

所以,如果你想使用equals,请参阅Rafa El答案。否则,您可以在声明
映射已声明
映射的注释中使用
==

。这可能就是问题所在

当您调用
map.get(“infoCode”)
时,您将返回一个
对象

如果:

  • 对象
    实际上是
    整数
  • folderInfoData.getFolderInfoRecord().getInfoCode()
    正在返回一个
    整数
  • 两个
    Integer
    s包含相同的值
那么这个,

if (folderInfoData.getFolderInfoRecord().getInfoCode()
        .equals(map.get("infoCode"))) {
将计算为
true


因此,要么它们是两个
整数,但不包含相同的值,要么它们是不同类型的对象且不相等。(或者,“infoCode”在映射中不存在,它返回
null

在注释中,您声明
映射已声明
映射。这可能就是问题所在

当您调用
map.get(“infoCode”)
时,您将返回一个
对象

如果:

  • 对象
    实际上是
    整数
  • folderInfoData.getFolderInfoRecord().getInfoCode()
    正在返回一个
    整数
  • 两个
    Integer
    s包含相同的值
那么这个,

if (folderInfoData.getFolderInfoRecord().getInfoCode()
        .equals(map.get("infoCode"))) {
将计算为
true


因此,要么它们是两个
整数,但不包含相同的值,要么它们是不同类型的对象且不相等。(或者,“infoCode”在映射中不存在,它返回
null

什么是
getInfoCode()
@Sitansu
Integer
int
的返回类型?事实证明,这可能会有所不同。
folderinfo.getfolderinfo.record().getInfoCode()
返回的确切类型是什么,以及
map
是如何声明的?这就是你的问题所在。
getInfoCode()
@Sitansu
Integer
int
的返回类型是什么?事实证明,这可能会有所不同。
folderInfo.getFolderInfo.Record().getInfoCode()
返回的确切类型是什么,以及
map
是如何声明的?map map这将是您的问题,就在那里。为什么.equals不起作用和==起作用?您应该解释这一点,因为.equals的默认实现执行引用(=)比较,所以更应该解释这一点。您是否打算说getInfoCode()返回的对象中.equals()重写的实现是错误的?如果它是编译的,则这是错误的。一个映射不能返回一个基元,所以除了导致一些不必要的取消装箱之外,它不会有任何区别。因为这些是int值,所以应该使用相等运算符。因为它们是双方传递的实际值。为什么我们不应该这样做?哦,我很抱歉。我确实想当然了,但回答错了。谢谢。为什么不呢。等于不工作,等于工作?您应该解释这一点,因为.equals的默认实现执行引用(=)比较,所以更应该解释这一点。您是否打算说getInfoCode()返回的对象中.equals()重写的实现是错误的?如果它是编译的,则这是错误的。一个映射不能返回一个基元,所以除了导致一些不必要的取消装箱之外,它不会有任何区别。因为这些是int值,所以应该使用相等运算符。因为它们是双方传递的实际值。为什么我们不应该这样做?哦,我很抱歉。我确实想当然了,但回答错了。感谢Integer类型中的方法parseInt(字符串)不适用于参数(对象)。Integer类型中的方法parseInt(字符串)不适用于参数(对象)Integer num2=新整数(map.get(“infoCode”);构造函数整数(对象)为undefined@Sitansu如果你得到的构造函数整数(Object)是未定义的,这意味着
map。get(“infoCode”)
值已经是
整数了type@DnR不,这意味着他的
Map
被声明为
Map
(参见注释)。对于接受
对象的
整数
没有构造函数(或
parseInt())
,BrianRoach yes,