2

これは、私が取り出してテストするために簡略化したJavaプログラムのセクションです。タスクは、ArrayListからの2つの整数を比較し、それらが等しいかどうかを示すことです。

以下のコードは、128未満の数値では機能しますが、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");
}




}
}
4

3 に答える 3

8

はい、それは予想されます。==オブジェクト参照をまたはと比較しないでください!=。代わりに、またはより適切に使用する必要があります-ではなく.equals(..)プリミティブを使用してください。intInteger

つまり、最大128の値がキャッシュされ、JVMは同じオブジェクトを提供します(したがって、参照比較が機能します)。128を超えると、新しいインスタンスが作成されます。のjavadocを見てくださいInteger.valueOf(int)(これは舞台裏で行われていることです)

指定されたint値を表す整数インスタンスを返します。新しいIntegerインスタンスが必要ない場合は、コンストラクターInteger(int)よりもこのメソッドを使用する必要があります。このメソッドは、頻繁に要求される値をキャッシュすることで、スペースと時間のパフォーマンスを大幅に向上させる可能性があります。

于 2012-04-19T07:38:09.707 に答える
0

Javaでオブジェクトを比較する場合、実際には、==等式演算子を使用する場合の値ではなく、参照を比較します。代わりに、このメソッドを使用し.equals()て値を比較する必要があります。

Integer a = 2423;
Integer b = 5455;

if (a.equals(b)) { ...
于 2012-04-19T07:39:59.053 に答える
0

変数型として、intプリミティブの代わりにIntegerオブジェクトを使用します。これは、Javaがキャッシュするため、128までの値に対しては「=」演算子でのみ機能します。オブジェクトを比較する正しい方法は、.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-04-19T07:42:59.743 に答える