当前位置: 首页 > 面试题库 >

为什么Java看不到Integers相等?

艾奕
2023-03-14
问题内容

我有一个应该相等的整数(我通过输出验证了它)。但是在我的if情况下,Java看不到这些变量具有相同的值。

我有以下代码:

if (pay[0]==point[0] && pay[1]==point[1]) {
    game.log.fine(">>>>>> the same");
} else {
    game.log.fine(">>>>>> different");
}
game.log.fine("Compare:" + pay[0] + "," + pay[1] + " -> " + point[0] + "," + point[1]);

并产生以下输出:

FINE: >>>>>> different
FINE: Compare:: 60,145 -> 60,145

可能我必须添加point定义如下的内容:

Integer[] point = new Integer[2];

并且pay我们从环路构造采取:

for (Integer[] pay : payoffs2exchanges.keySet())

因此,这两个变量都具有整数类型。


问题答案:

查看本文:装箱的值和相等性

使用或比较包装器类型(例如Integers,Longs或Booleans)时,您 会将它们作为引用* 而不是值 进行比较
==``!=
*

如果两个变量指向不同的对象,则 即使对象表示相同的值* ,它们也不会==相互影响。 *

示例: 使用==和比较不同的Integer对象!=

Integer i = new Integer(10);
Integer j = new Integer(10);
System.out.println(i == j); // false
System.out.println(i != j); // true

解决方案是使用.equals()… 比较值。

示例: 使用比较对象.equals(…)

Integer i = new Integer(10);
Integer j = new Integer(10);
System.out.println(i.equals(j)); // true

…或显式取消装箱操作数。

示例:通过 强制强制拆箱:

Integer i = new Integer(10);
Integer j = new Integer(10);
System.out.println((int) i == (int) j); // true

参考资料/进一步阅读

  • Java:盒装值和相等性
  • Java:基元与对象和引用
  • Java:包装类型
  • Java:自动装箱和拆箱


 类似资料:
  • 使用指南 - 疑难问题 - 数据缺失或无数据问题 - 为什么看不到热力图 设置热力图的页面上边没有正确添加当前站点的统计代码 网站有跳转,但是热力图上边设置的监控网址是跳转之前的,请用跳转之后的网址设置; 注意查看时间,热力图是隔一天后才有数据的; 偶尔浏览器的显示存在问题,请将页面设置为100%大小,并作刷新处理,且建议使用Chrome和Firefox浏览器。 页面上添加了禁止iframe加载的

  • 我有一个多模块Maven项目,其中一个模块使用JavaFX。虽然在Eclipse中编译一切都很好,但是执行 mvn清洁编译 返回此错误 maven似乎看不到包含的模块(但是Eclipse看到了它,因为它不会给出编译错误)。我如何让Maven编译这段代码? 我已经创建了我的应用程序的迷你版本,它再现了这一点。这些是文件: mvn clean编译的输出 日志中的编译器详细信息

  • 我是一个很新的编码,我一直有问题的物理计算器,我一直在做。我做这件事是为了在类项目中使用OOP。我的要点是让用户输入变量,然后它们被运到类文件上的等式中,然后最后显示结果。当我尝试编译时,它说函数getAnswer看不到它上面声明的结果。我计划对这个方程进行16次迭代,所以我首先要弄清楚为什么这一次不起作用。欢迎任何回答。 -谢谢 这是类文件

  • 问题内容: 编辑:好的,好的,我读错了。我没有将int与Integer进行比较。适当注意。 我的SCJP书说: 当==用于将原语与包装器进行比较时,包装器将被展开,并且比较将是原语与原始的比较。 因此,您会认为此代码将打印: 但它打印。 另外,根据我的书,这应该打印: 不。是。 是什么赋予了? 问题答案: 当您为该值分配1时,将装箱,创建一个对象。然后比较比较两个对象引用。引用不相等,因此比较失败

  • 我正在使用Eclipse和Gradle。Twilio被列为依赖项。所有版本都是最新的。引用Gradle的代码将无法编译,并返回Twilio类不存在的错误消息。在线代码令人沮丧地过时了。我希望这里有人能帮忙。 我正在运行的代码非常基本:

  • 我有一个简单的脚本,每2秒打印一次hello。 我有一个超简单的docker文件运行这个脚本。 首先我建立docker映像: 现在,我使用选项运行它,它按预期工作。 但是当我以分离模式运行它,然后尝试查看日志时,我什么也看不到。