【问题标题】:Two integer value equal in java?java中两个整数值相等?
【发布时间】:2014-01-13 09:45:03
【问题描述】:

在我下面的代码中,我检查两个infocode(如果存在)显示msgMSG_SAME_INFO_ALREADY_EXISTS,但问题是当我比较两个infocode 时,信息代码值相同,但无法进入循环。

我在下面的代码中有什么问题?

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

下面给出的两个调试值:

folderInfoData.getFolderInforecord().getInfoCode()map.get("infoCode") 信息代码都返回下面给出的整数。

谁能告诉我如何解决这个问题?

谢谢

【问题讨论】:

标签: java map integer equals record


【解决方案1】:

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

如果被装箱的值 p 是真、假、字节或字符 范围 \u0000 到 \u007f,或介于 -128 和 127 之间的整数或短数字 (含),则令 r1 和 r2 为任意两个装箱的结果 p的转换。 r1 == r2 总是如此。

由于您要比较的值不在上述范围内,结果将被评估为false。你应该改用Integer#equals

【讨论】:

  • 如果Integer 值之一不是由自动装箱产生的,它甚至不能在该区域可靠地工作:Integer i1 = 100; Integer i2 = new Integer(100); System.out.println(i1 == i2);。这将打印false。您应该始终使用equals 来比较Integer,无论它们在哪个范围内。
  • @JoachimSauer 这就是应该澄清反对意见的方式:) 像这样的评论对我和 OP 都非常有帮助。
【解决方案2】:

您正在将 Object 与 == 进行比较,这就是问题所在。使用equals() 而不是==

我们为什么要使用equals()

阅读this 链接了解更多信息。和ᴍaroun ᴍaroun 答案描述更多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    相关资源
    最近更新 更多