首页 > 解决方案 > -129 != -129 在 Java 整数集合(集合)

问题描述

我正在研究 Java ArrayList of Integers。但是,我发现在某些负 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));

一切都开始正常工作。

或者

即使我们使用.equals()而不是==它也可以正常工作。

喜欢:

list.get(0).equals(list.get(1));

我的问题是:为什么?它首先发生吗?

是因为auto-boxingunboxing吗?

或者

是因为buffer问题吗?如果你仔细观察它是-((2^7)+1)和以后。

或者

是因为收藏问题吗?

或者

这是一个错误吗?(我不认为会是这样)

或者

是因为某些 IEEE 编号标准吗?

或者

还要别的吗?

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

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

标签: javajava-8javacieee-754

解决方案


== 在对象上是指同一实例的相等性。在原始 int 上,它指的是相同的值 equals 是比较 Integer、Long 或 String 或其他基于值的正确方法。收藏不是问题


推荐阅读