首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >-129 != -129在Java整数集合(Collection<Integer>)中

-129 != -129在Java整数集合(Collection<Integer>)中
EN

Stack Overflow用户
提问于 2020-02-16 09:57:11
回答 1查看 851关注 0票数 0

我当时在做整数的Java ArrayList。但是,我发现在某些负int值之后,<Integer>类型集合开始与==操作符发生异常行为。

请参阅以下代码:

代码语言:javascript
复制
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

就好像我们改变了:

代码语言:javascript
复制
list.get(0) == list.get(1);

至:

代码语言:javascript
复制
(int) list.get(0) == (int) list.get(1));

一切都好起来了。

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

像这样:

代码语言:javascript
复制
list.get(0).equals(list.get(1));

我的问题是:为什么?是在第一位发生的吗?

是因为auto-boxingunboxing

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

是因为收藏问题吗?

是虫子吗?(我不认为情况会这样)

是因为IEEE的一些数字标准吗?

还要别的吗?

这有点奇怪,不过,我希望这里的专家能帮我一把。

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

EN

回答 1

Stack Overflow用户

发布于 2020-02-16 10:00:00

对象上的==引用相同实例的相等。在原语int上,它引用相同的值等于是比较Integer,或Long或String或其他基于值的正确的chiice。收藏不成问题

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60247312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档