-129!= -129 in Java Integers(Collection )

问题描述 投票:0回答:1

我正在研究整数的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-boxingunboxing吗?

是因为buffer问题?如果仔细观察,它是-((2^7)+1)及更高版本。

是因为收款问题吗?

是错误吗? (我认为情况并非如此)

是因为某些IEEE数字标准吗?

还有什么?

这有点奇怪;但是,我希望这里的专家会帮助我。

PS。请不要问为什么我写了这个奇怪的代码(让我们说我只是在测试一些东西:P:D)

java java-8 javac ieee-754
1个回答
0
投票
对象上的

==表示相同实例的相等性。在原始int上,它引用相同的值

© www.soinside.com 2019 - 2024. All rights reserved.