相关疑难解决方法(0)

如何正确比较Java中的两个整数?

我知道,如果你将盒装原始Integer与常量进行比较,例如:

Integer a = 4;
if (a < 5)
Run Code Online (Sandbox Code Playgroud)

a 将自动取消装箱,比较将起作用.

但是,当您比较两个盒装Integers并希望比较相等或小于/大于?时会发生什么?

Integer a = 4;
Integer b = 5;

if (a == b)
Run Code Online (Sandbox Code Playgroud)

以上代码是否会导致检查它们是否是同一个对象,还是会在这种情况下自动取消装箱?

关于什么:

Integer a = 4;
Integer b = 5;

if (a < b)
Run Code Online (Sandbox Code Playgroud)

java autoboxing integer

196
推荐指数
7
解决办法
35万
查看次数

Java:整数等于==

从Java 1.5中,你几乎可以互换Integer使用int在许多情况下.

但是,我发现我的代码中存在一个潜在的缺陷让我感到有些惊讶.

以下代码:

Integer cdiCt = ...;
Integer cdsCt = ...;
...
if (cdiCt != null && cdsCt != null && cdiCt != cdsCt)
    mismatch = true;
Run Code Online (Sandbox Code Playgroud)

虽然我无法确定在什么情况下,但是当值相等时,似乎错误地设置了不匹配.我在Eclipse中设置了一个断点,看到这些Integer值都是137,我检查了布尔表达式并且它说它是假的,但当我跨过它时,它设置不匹配为真.

将条件更改为:

if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt))
Run Code Online (Sandbox Code Playgroud)

解决了这个问题.

有谁可以解释为什么会这样?到目前为止,我只在自己的PC上看到了我的localhost上的行为.在这种特殊情况下,代码成功地通过了大约20次比较,但在2次失败.问题始终可以重现.

如果这是一个普遍的问题,它应该导致我们的其他环境(开发和测试)出错,但到目前为止,没有人在执行此代码片段的数百次测试后报告该问题.

==用于比较两个Integer值仍然不合法吗?

除了下面的所有精细答案之外,以下stackoverflow链接还有相当多的附加信息.它实际上已经回答了我原来的问题,但因为我没有在我的问题中提到自动装箱,所以它没有出现在选定的建议中:

为什么编译器/ JVM不能让autoboxing"正常工作"?

java primitive integer wrapper equals-operator

142
推荐指数
5
解决办法
15万
查看次数

为什么相同的整数值在Java中具有不同的内存地址?

今天是我第一次尝试Java语言.当我尝试这段代码时,我觉得很奇怪:

int a =500;
System.out.println(System.identityHashCode(500));
System.out.println(System.identityHashCode(500));
System.out.println(System.identityHashCode(a));
System.out.println(System.identityHashCode(a));
Run Code Online (Sandbox Code Playgroud)

所有这些结果都不同.但当我将500改为50时,它会变成相同的结果.

为什么?

java memory

5
推荐指数
1
解决办法
1478
查看次数