两个整数值在java中相等?

Sit*_*nsu 1 java integer equals record map

在我的下面的代码我检查两个infocode如果它存在显示msg MSG_SAME_INFO_ALREADY_EXISTS但问题是,当我比较两个信息infocode编码值相同但它不能进入​​循环.

我在下面的代码中错了什么?

if (folderInfoData.getFolderInforecord().getInfoCode() == map.get("infoCode")) {
    showError(pageResourceBundle.getText("MSG_SAME_INFO_ALREADY_EXISTS"));
    return;
    }
Run Code Online (Sandbox Code Playgroud)

两个Debug值都给出如下:

下面给出了both folderInfoData.getFolderInforecord().getInfoCode()map.get("infoCode")infocode返回的整数.

在此输入图像描述 在此输入图像描述

谁能告诉我怎么解决这个问题?

谢谢

Mar*_*oun 5

您正在比较对象 - Integers,==运算符可能仅适用于[-128,127]之间的数字.看看JLS:

如果被装箱值p为真,假,字节,或在范围\ u0000的一个char到\ u007f,或int或-128和127(含)之间的短号码,然后让r1和r2是的结果p的任何两个拳击转换.始终是r1 == r2的情况.

由于您所比较的值不在上述范围内,因此将对结果进行评估false.你应该使用Integer#equals.

  • 如果其中一个"整数"值不是由自动装箱产生的话,它甚至在该区域内不能可靠地工作:`整数i1 = 100; 整数i2 = new Integer(100); System.out.println(i1 == i2);`.这将打印'false`.你应该**总是**使用`equals`来比较`Integer`,无论它们在哪个范围内. (3认同)