我正在研究整数的Java ArrayList。但是,我发现int值为负数之后; <Integer>
类型的集合开始使用==
运算符变得怪异。
请参见下面的代码:
import java.util.*;
public class JavaWeirdness
{
public static void main(String[] args)
{
for(int i=0;i>=-200;i--)
{
ArrayList<Integer> list = new ArrayList<>();
list.add(i);
list.add(i);
System.out.println("For i = "+ i);
System.out.println((list.get(0) == list.get(1)));
}
}
}
当i <= -129
时,它将为每个值打印false
。
因此它使我感到困惑;是因为Refrence Type Integer
而不是primitive int
?
如果我们更改:
list.get(0) == list.get(1);
收件人:
(int) list.get(0) == (int) list.get(1));
一切开始正常。
OR
即使我们使用.equals()
代替==
,它也可以正常工作。
喜欢:
list.get(0).equals(list.get(1));
BUT
我的问题是:为什么?首先发生吗?
是因为auto-boxing
和unboxing
吗?
或
是因为buffer
问题?如果仔细观察,它是-((2^7)+1)
及更高版本。
或
是因为收款问题吗?
或
是错误吗? (我认为情况并非如此)
或
是因为某些IEEE数字标准吗?
或
还有什么?
这有点奇怪;但是,我希望这里的专家会帮助我。
PS。请不要问为什么我写了这个奇怪的代码(让我们说我只是在测试一些东西:P:D)
==表示相同实例的相等性。在原始int上,它引用相同的值