web-dev-qa-db-ja.com

整数のint値をインクリメントしますか?

Javaで整数の値をインクリメントするにはどうすればよいですか? intValueで値を取得でき、new Integer(int i)で値を設定できることを知っています。

playerID.intValue()++;

動作しないようです。

注:PlayerIDは、次のように作成された整数です。

Integer playerID = new Integer(1);
73
William

Integerオブジェクトは不変なので、作成された値を変更することはできません。新しいIntegerを作成し、既存のものを置き換える必要があります。

playerID = new Integer(playerID.intValue() + 1);
90
Grodriguez

グロドリゲスが言うように、Integerオブジェクトは不変です。ここでの問題は、ID自体ではなく、プレーヤーIDのint値をインクリメントしようとしていることです。 Java 5+では、playerID++と書くことができます。

副次的な注意事項として、Integerのコンストラクターを呼び出さないでください。 Integer foo = 5のように、intsをIntegersに直接割り当てるだけで、オートボクシングを活用できます。これはInteger.valueOf(int)を透過的に使用します。これは、常に新しいオブジェクトを作成する必要がないため、コンストラクターよりも優れています。

47
ColinD

整数オブジェクトは不変です。オブジェクト自体が保持する整数の値を変更することはできませんが、結果を保持するために新しいIntegerオブジェクトを作成するだけです。

Integer start = new Integer(5);
Integer end = start + 5; // end == 10;
7
RHSeeger

たぶんこれもいくらか価値がある:AtomicIntegerと呼ばれるJavaクラスがある( https://docs.Oracle.com/javase/8/docs/api/Javaを参照) /util/concurrent/atomic/AtomicInteger.html )。このクラスには、addAndGet(int delta)incrementAndGet()(およびそれらに相当するもの)などの便利なメソッドがあり、同じインスタンスの値をインクリメント/デクリメントできます。クラスは同時実行のコンテキストで使用されるように設計されていますが、他のシナリオでも非常に有用であり、おそらくニーズに合っています。

7
Vivit

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);
}

整数自体は依然として不変です。

7
vitvlkv

Java 7の場合、インクリメント演算子 '++'は整数で機能します。以下はテスト済みの例です

    Integer i = new Integer( 12 );
    System.out.println(i); //12
    i = i++;
    System.out.println(i); //13
6
samsamara

たぶんあなたは試すことができます:

final AtomicInteger i = new AtomicInteger(0);
i.set(1);
i.get();
4
fantouch

整数の変更可能な代替としてIntHolderを使用できます。しかし、それは価値がありますか?

3
Stan Kurilin

すべてのプリミティブラッパーオブジェクトは不変です。

私は質問に遅れているかもしれませんが、playerID++を実行すると、実際に次のようなことが起こることを追加して明確にしたいと思います。

playerID = new Integer( playerID.intValue() + 1);

ご覧のとおり、新しいIntegerオブジェクトが作成されます。

0