Java Stack - 修改堆栈中的最后一个元素

Sun*_*gam 1 java stack

我在Java中有一堆Integer,我想知道是否还有其他方法可以将"最后推送的项目"增加一个而不首先将其加入.

我目前的解决方案是

Stack<Integer> stack = new Stack<Integer>();
stack.push(1);
stack.push(2);   // Increment 2 to 3
Integer last = stack.pop();
stack.push(last+1);
Run Code Online (Sandbox Code Playgroud)

我尝试了以下但没有工作

Integer last = stack.peek();
last+=1;
Run Code Online (Sandbox Code Playgroud)

我认为它会起作用,因为last是对堆栈中最后一个元素的引用,它会增加.

rua*_*akh 8

在Java中,Integer类是不可变的,这意味着Integer永远不能修改对象.这个:

last += 1;
Run Code Online (Sandbox Code Playgroud)

这真的只是简写:

last = Integer.valueOf(last.intValue() + 1);
Run Code Online (Sandbox Code Playgroud)

也就是说,它实际上创建(或检索)一个不同的 Integer实例,其值大于前一个Integer实例的值.

如果您希望能够修改堆栈顶部的对象,则需要在堆栈中放置可变对象.你可以创建自己的IntWrapper或者IntHolder或MutableInteger类为该.(但我不特别推荐这个.)