Javaで整数の値をインクリメントするにはどうすればよいですか?intValueで値を取得でき、new Integer(int i)で設定できることはわかっています。
playerID.intValue()++;
動作しないようです。
注:PlayerIDは、次のもので作成された整数です。
Integer playerID = new Integer(1);
Javaで整数の値をインクリメントするにはどうすればよいですか?intValueで値を取得でき、new Integer(int i)で設定できることはわかっています。
playerID.intValue()++;
動作しないようです。
注:PlayerIDは、次のもので作成された整数です。
Integer playerID = new Integer(1);
回答:
Integer
オブジェクトは不変であるため、一度作成した値を変更することはできません。新しいものを作成しInteger
、既存のものを置き換える必要があります。
playerID = new Integer(playerID.intValue() + 1);
Integer.valueOf(int)
ですが...答えに悪い習慣を使うという考えはまったく好きではありませんが、それは人々が彼らが大丈夫だと思うことにつながる可能性があります。私はまた、OPは、彼が彼が使用したい操作を使用することができることを実現することが有用だと思うint
とInteger
同じように。
Grodriguezが言うように、Integer
オブジェクトは不変です。ここでの問題はint
、ID自体ではなくプレーヤーIDの値をインクリメントしようとしていることです。Java 5以降では、と書くだけplayerID++
です。
補足として、Integer
のコンストラクターを呼び出さないでください。のように、int
sをInteger
sに直接割り当てるだけで、オートボクシングを活用できInteger foo = 5
ます。これはInteger.valueOf(int)
透過的に使用されます。これは、常に新しいオブジェクトを作成する必要がないため、コンストラクターよりも優れています。
Java 7および8。インクリメントは参照を変更するため、別の整数オブジェクトを参照します。見てください:
@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);
}
整数自体は依然として不変です。
++i
関数(変数上i
。i++
同様に記述できることに注意してください)とInteger
クラスの不変性(変数上iOrig
)を示しているため、IMHOのベストアンサーです。他のほとんどの回答は、2つの概念のうちの1つだけを示しています。
AtomicInteger
多分これも価値があります:と呼ばれるJavaクラスがありますAtomicInteger
。
このクラスには、addAndGet(int delta)
or incrementAndGet()
(およびその対応物)のような便利なメソッドがいくつかあり、同じインスタンスの値をインクリメント/デクリメントできます。このクラスは並行性のコンテキストで使用するように設計されていますが、他のシナリオでも非常に役立ち、おそらくニーズに適合します。
final AtomicInteger count = new AtomicInteger( 0 ) ;
…
count.incrementAndGet(); // Ignoring the return value.
Java 7の場合、インクリメント演算子「++」は整数で機能します。以下はテストされた例です
Integer i = new Integer( 12 );
System.out.println(i); //12
i = i++;
System.out.println(i); //13
i = new Integer(12)
はまだ参照していることに注意してください...これに12
13
i = i++
と同じではありませんi++
。技術的には++
、結果を何かに割り当てずに単独で使用することはできないため、整数では実際には機能しません。
すべてのプリミティブラッパーオブジェクトは不変です。
私はおそらく質問に遅れていますがplayerID++
、あなたがそうするとき、実際に起こることは次のようなものであることを追加して明確にしたいです:
playerID = Integer.valueOf( playerID.intValue() + 1);
Integer.valueOf(INT)は、範囲内で常にキャッシュ値-128〜127意志含め、そしてよいこの範囲外の他の値をキャッシュします。
playerID++
ようにplayerID = Integer.valueOf( playerID.intValue() + 1)
なります。このメソッドは、常に-128から127までの範囲の値をキャッシュします。