簡體   English   中英

增加 Integer 的 int 值?

[英]Increment a Integer's int value?

如何增加 Java 中的整數值? 我知道我可以用 intValue 獲取值,我可以用 new Integer(int i) 設置它。

playerID.intValue()++;

似乎不起作用。

注意:PlayerID 是 Integer,創建時使用:

Integer playerID = new Integer(1);

Integer對象是不可變的,因此一旦創建它們就不能修改其值。 您將需要創建一個新的Integer並替換現有的Integer

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

正如 Grodriguez 所說, Integer對象是不可變的。 這里的問題是您試圖增加玩家 ID 的int值而不是 ID 本身。 在 Java 5+ 中,您可以只編寫playerID++

作為旁注,永遠不要調用Integer的構造函數。 通過直接將int s 分配給Integer s 來利用自動裝箱,例如Integer foo = 5 這將透明地使用Integer.valueOf(int) ,這優於構造函數,因為它並不總是必須創建一個新對象。

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

Integer 本身仍然是不可變的。

AtomicInteger

也許這也有一些價值:有一個名為AtomicInteger的 Java 類。

此類有一些有用的方法,例如addAndGet(int delta)incrementAndGet() (以及它們的對應方法),它們允許您遞增/遞減同一實例的值。 盡管該類旨在用於concurrency的上下文中,但它在其他場景中也非常有用,並且可能適合您的需要。

final AtomicInteger count = new AtomicInteger( 0 ) ;
…
count.incrementAndGet();  // Ignoring the return value. 

整數對象是不可變的。 你不能改變對象本身持有的整數的值,但你可以創建一個新的 Integer 對象來保存結果:

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

對於 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 作為 Integer 的可變替代品。 但值得嗎?

所有原始包裝對象都是不可變的。

我可能在這個問題上遲到了,但我想補充並澄清一下,當你做playerID++ ,真正發生的事情是這樣的:

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

Integer.valueOf(int)將始終緩存 -128 到 127(含)范圍內的值,並且可能緩存此范圍之外的其他值。

Java 8之后,我們可以如下使用

import java.lang.Math;
Math.incrementExact(playerID);
//it increment the integer value to + 1. It is also available for long

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM