【发布时间】:2014-07-18 12:32:38
【问题描述】:
在我正在处理的一个程序中,我遇到了一个数据存储问题,特别是与 ArrayLists 相关。这不是我正在测试的实际代码,但它提供了一个示例来说明我的意思。
public class test
{
public static void test()
{
ArrayList<Integer> bob = new ArrayList<Integer>();
bob.add(129);
bob.add(129);
System.out.println(bob.get(0) == 129 );
System.out.println(bob.get(1) == 129 );
System.out.println(bob.get(0) == bob.get(1) );
}
}
如果你运行它,你会得到真、真、假。该代码识别出两者都等于 129,但由于某种原因,当它尝试查看它们是否彼此相等时返回 false。但是,如果将值更改为 127,它会返回 true、true 和 true。多次测试不同的值,你会看到接收 true、true 和 true 的最小值是 -128,最大值是 127。这是 byte 的间隔,这让我怀疑 == 操作使用在这种情况下是字节。
有趣的是,如果你修改代码,让它读起来
public class test
{
public static void test()
{
ArrayList<Integer> bob = new ArrayList<Integer>();
bob.add(129);
bob.add(129);
int a = bob.get(0);
int b = bob.get(1);
System.out.println(a == 129 );
System.out.println(b == 129 );
System.out.println(a == b );
}
}
它按预期工作。输出真、真、真。为什么在比较之前将值保存为 int 会改变结果?是不是因为如果不保存,比较会默认使用byte进行==比较?
【问题讨论】:
-
Integer 是一个类,您正在将一个 Integer 对象添加到 ArrayList 中。此外,当您 .get() 时,它应该返回 Integer 对象的两个实例。比较结果应该是比较对象实例。当您使用原生类型 int 来保存值并使用比较运算符时,它会比较值。
标签: java arraylist integer byte equals