違い - java integer 足し算




Integerのint値をインクリメントしますか? (6)

JavaでIntegerの値を増やすにはどうすればよいですか? 私はintValueで値を取得でき、新しいInteger(int i)で設定できることを知っています。

playerID.intValue()++;

動作していないようです。

注:PlayerIDは、以下で作成されたIntegerです。

Integer playerID = new Integer(1);

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

補足として、 Integerのコンストラクタを決して呼び出してはいけません。 Integer foo = 5ように、 Integer foo = 5直接Integer代入するだけで自動ボクシングを利用できます。 Integer.valueOf(int)透過的に使用されInteger.valueOf(int) 。これは、常に新しいオブジェクトを作成する必要がないため、コンストラクタより優れています。


Increment DOESは参照を変更するため、別の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で機能します。 以下はテスト済みの例です

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

AtomicIntegerと呼ばれるJavaクラスがあります( https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html参照)。 このクラスには、同じインスタンスの値を増減できるaddAndGet(int delta)incrementAndGet() (およびそれに対応する)などの便利なメソッドがいくつかあります。 クラスは並行処理のコンテキストで使用するように設計されていますが、他のシナリオでも非常に便利で、おそらく必要に応じています。


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

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

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

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






int