【问题标题】:JAVA: Comparison not working when Integer larger than 128JAVA:当整数大于 128 时比较不起作用
【发布时间】:2012-04-19 07:35:34
【问题描述】:

这是我的 Java 程序的一部分,我已经取出并简化了测试。任务是比较 ArrayList 中的两个整数并说明它们是否相等。

以下代码适用于数字 128 并且该代码将不起作用。

任何帮助都会很棒, 谢谢。

import java.util.*;

public class test
{
public static void main (String[] args)
{

Integer seat1Store = 128;
Integer seat2Store = 128;
Integer seat3Store = 0;
Integer seat4Store = 0;
Integer seat5Store = 0;


ArrayList<Integer> proceedArray = new ArrayList<Integer>();


if (seat1Store !=0)
{
    proceedArray.add(seat1Store);
}
if (seat2Store !=0)
{
    proceedArray.add(seat2Store);
}
if (seat3Store !=0)
{
    proceedArray.add(seat3Store);
}
if (seat4Store !=0)
{
    proceedArray.add(seat4Store);
}
if (seat5Store !=0)
{
    proceedArray.add(seat5Store);
}

System.out.println("ArrayList = " + proceedArray);


boolean proceed = false;


for(int i = 0; i<proceedArray.size();i++)
{
    for(int p=0; p<proceedArray.size(); p++)
    {
        if(i != p)
        {
            if(proceedArray.get(i) == proceedArray.get(p))
            {
                System.out.println("DUPLICATE");
                System.exit(0);
            }
        }
    }
    proceed = true;
}


if (proceed == true)
{
    System.out.println("PROCEEDED");
}




}
}

【问题讨论】:

标签: java integer


【解决方案1】:

是的,这是意料之中的。您不应将对象引用与==!= 进行比较。您应该改用.equals(..),或者更好——使用原语int 而不是Integer

问题是,高达 128 的值被缓存,并且 JVM 为您提供相同的对象(因此引用比较有效)。超过 128 它会创建一个新实例。查看Integer.valueOf(int) 的javadoc(这是幕后发生的事情)

返回一个表示指定 int 值的 Integer 实例。如果不需要新的 Integer 实例,则通常应优先使用此方法而不是构造函数 Integer(int),因为此方法可能会通过缓存频繁请求的值来显着提高空间和时间性能。

【讨论】:

  • 谢谢你 .equals() 工作了。也谢谢你的解释:)
【解决方案2】:

在 Java 中比较对象时,您实际上是在比较引用,而不是在使用 == 相等运算符时比较值。相反,您应该使用方法.equals() 来比较值;

Integer a = 2423;
Integer b = 5455;

if (a.equals(b)) { ...

【讨论】:

    【解决方案3】:

    您使用整数对象而不是 int 原始类型作为变量类型。这仅适用于高达 128 的值的 '=' 运算符,因为 java 会缓存它。比较对象的正确方法是 .equals() 函数。

    但使用原始值代替。

    int i1 = 1;
    int 12 = 2;
    List<Integer> values = ArrayList<Integer>();
    if (!values.contains(i1)) {
     values.add(i); 
    }
    if (!values.contains(i2)) {
     values.add(i2); 
    }
    

    【讨论】:

      猜你喜欢
      • 2012-05-29
      • 1970-01-01
      • 2014-11-07
      • 2014-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多