Javaで整数の値をインクリメントするにはどうすればよいですか? intValueで値を取得でき、new Integer(int i)で値を設定できることを知っています。
playerID.intValue()++;
動作しないようです。
注:PlayerIDは、次のように作成された整数です。
Integer playerID = new Integer(1);
Integer
オブジェクトは不変なので、作成された値を変更することはできません。新しいInteger
を作成し、既存のものを置き換える必要があります。
playerID = new Integer(playerID.intValue() + 1);
グロドリゲスが言うように、Integer
オブジェクトは不変です。ここでの問題は、ID自体ではなく、プレーヤーIDのint
値をインクリメントしようとしていることです。 Java 5+では、playerID++
と書くことができます。
副次的な注意事項として、Integer
のコンストラクターを呼び出さないでください。 Integer foo = 5
のように、int
sをInteger
sに直接割り当てるだけで、オートボクシングを活用できます。これはInteger.valueOf(int)
を透過的に使用します。これは、常に新しいオブジェクトを作成する必要がないため、コンストラクターよりも優れています。
整数オブジェクトは不変です。オブジェクト自体が保持する整数の値を変更することはできませんが、結果を保持するために新しいIntegerオブジェクトを作成するだけです。
Integer start = new Integer(5);
Integer end = start + 5; // end == 10;
たぶんこれもいくらか価値がある:AtomicInteger
と呼ばれるJavaクラスがある( https://docs.Oracle.com/javase/8/docs/api/Javaを参照) /util/concurrent/atomic/AtomicInteger.html )。このクラスには、addAndGet(int delta)
やincrementAndGet()
(およびそれらに相当するもの)などの便利なメソッドがあり、同じインスタンスの値をインクリメント/デクリメントできます。クラスは同時実行のコンテキストで使用されるように設計されていますが、他のシナリオでも非常に有用であり、おそらくニーズに合っています。
Java 7および8。Incrementは参照を変更するため、別のIntegerオブジェクトを参照します。見て:
@Test
public void incInteger()
{
Integer i = 5;
Integer iOrig = i;
++i; // Same as i = i + 1;
Assert.assertEquals(6, i.intValue());
Assert.assertNotEquals(iOrig, i);
}
整数自体は依然として不変です。
Java 7の場合、インクリメント演算子 '++'は整数で機能します。以下はテスト済みの例です
Integer i = new Integer( 12 );
System.out.println(i); //12
i = i++;
System.out.println(i); //13
たぶんあなたは試すことができます:
final AtomicInteger i = new AtomicInteger(0);
i.set(1);
i.get();
整数の変更可能な代替としてIntHolderを使用できます。しかし、それは価値がありますか?
すべてのプリミティブラッパーオブジェクトは不変です。
私は質問に遅れているかもしれませんが、playerID++
を実行すると、実際に次のようなことが起こることを追加して明確にしたいと思います。
playerID = new Integer( playerID.intValue() + 1);
ご覧のとおり、新しいIntegerオブジェクトが作成されます。