java - -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-boxing
和unboxing
吗?
或者
是因为buffer
问题吗?如果你仔细观察它是-((2^7)+1)
和以后。
或者
是因为收藏问题吗?
或者
这是一个错误吗?(我不认为会是这样)
或者
是因为某些 IEEE 编号标准吗?
或者
还要别的吗?
这有点奇怪;但是,我希望这里的专家能帮助我。
PS。请不要问我为什么要写这个奇怪的代码(假设我只是在测试一些东西:P:D)
解决方案
== 在对象上是指同一实例的相等性。在原始 int 上,它指的是相同的值 equals 是比较 Integer、Long 或 String 或其他基于值的正确方法。收藏不是问题
推荐阅读
- python - Python:如何打印字典值
- apache-spark - Apache Spark Partitioning Data Using a SQL Function nTile
- api - OpenAPI 与 JSON:API
- r - 用 r 中的另一个数据替换列表中的每一行
- java - java构建过程中生成源是什么意思
- javascript - JavaScript,在异步函数中返回函数回调
- java - 无法转换为 class 。. . 是 loader 的未命名模块
- ghost-blog - 如何解决错误 503 Service Unavailable (Ghost)
- c# - ASP.NET Core 使用自定义 HttpClientHandler 模拟 HttpClient
- reactjs - 使用多个(最新)第 3 方反应库反应“未捕获的不变违规:元素类型无效”