递增整数的int值?

Wil*_*iam 75 java int integer class

如何在Java中增加Integer的值?我知道我可以用intValue获取值,我可以用新的Integer(int i)设置它.

playerID.intValue()++;
Run Code Online (Sandbox Code Playgroud)

似乎不起作用.

注意:PlayerID是一个用以下内容创建的Integer:

Integer playerID = new Integer(1);
Run Code Online (Sandbox Code Playgroud)

Gro*_*uez 92

Integer对象是不可变的,因此一旦创建了它们就无法修改它们.您需要创建一个新的Integer并替换现有的.

playerID = new Integer(playerID.intValue() + 1);
Run Code Online (Sandbox Code Playgroud)

  • 不要使用Integer的构造函数. (12认同)
  • 如果你必须使用非原始int,并且你想要可变性,你可以尝试commonsInt http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/mutable/MutableInt.html (2认同)
  • @威廉:据我所知,它只会在增加它的方法中增加。 (2认同)
  • @Grodriguez:也许,尽管如此,我还是建议`Integer.valueOf(int)`...我不喜欢在答案中使用不良做法的想法,这可能会导致人们认为他们可以接受做.我也认为对OP来说有用的是认识到他可以以同样的方式使用带有`Integer`的`int`的操作. (2认同)

Col*_*inD 48

正如格罗德里格斯所说,Integer物体是不可改变的.这里的问题是你试图增加int玩家ID 的值而不是ID本身.在Java 5+中,您可以编写playerID++.

作为旁注,永远不要打电话给Integer构造函数.只需将s直接分配给ints ,就可以利用自动装箱.这将透明地使用,它优于构造函数,因为它并不总是必须创建一个新对象.IntegerInteger foo = 5Integer.valueOf(int)


vit*_*lkv 12

Java 7和8.增量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);
}
Run Code Online (Sandbox Code Playgroud)

整数本身仍然是不可变的.


Viv*_*vit 8

也许这也有一些价值:有一个叫做的Java类AtomicInteger(参见https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html).这个类有一些有用的方法,比如AtomicIntegeraddAndGet(int delta)(和它们的对应物)允许你增加/减少同一个实例的值.尽管该类设计用于并发环境,但它在其他场景中也非常有用,可能符合您的需要.


RHS*_*ger 7

整数对象是不可变的.您不能更改对象本身持有的整数的值,但您可以创建一个新的Integer对象来保存结果:

Integer start = new Integer(5);
Integer end = start + 5; // end == 10;
Run Code Online (Sandbox Code Playgroud)


sam*_*ara 6

对于Java 7,增量运算符'++'适用于整数.以下是经过测试的示例

    Integer i = new Integer( 12 );
    System.out.println(i); //12
    i = i++;
    System.out.println(i); //13
Run Code Online (Sandbox Code Playgroud)

  • 但是请注意,其他对`i = new Integer(12)`的引用仍将引用`12`,而不是`13` ...容易被此代码绊倒 (2认同)
  • `i = i ++`与`i ++`不同.从技术上讲,"++"并不真正适用于我所说的整数,因为如果不将结果赋予某些东西,就不能单独使用它. (2认同)
  • 您不必重新分配!看:整数 foo = 5;整数 bar = foo; foo++;System.out.println("foo:" + foo + " bar: " + bar); 输出:foo:6 bar:5 (2认同)

fan*_*uch 5

也许你可以尝试:

final AtomicInteger i = new AtomicInteger(0);
i.set(1);
i.get();
Run Code Online (Sandbox Code Playgroud)