是否可以通过引用增加integer
值?
int counterA = 0;
int counterB = 0;
int counter = (condition) ? counterA : counterB;
//use counter
counter++;
结果:counterA + counterB将保持= 0,而不是递增。
答案 0 :(得分:4)
int
是一种基本类型,因此没有分配引用,只有值。你可以将它包装在一个类中:
public class IntegerHolder {
private int value;
public IntegerHolder(int value) {
this.value = value;
}
public void increment() {
value++;
}
...
}
答案 1 :(得分:4)
作为int holder的替代方法,您还可以使用数组:
int[] counter = new int[1];
counter[0]++;
答案 2 :(得分:1)
简短回答:使用AtomicInteger:
AtomicInteger counterA = new AtomicInteger();
AtomicInteger counterA = new AtomicInteger();
AtomicInteger counter = (condition) ? counterA : counterB;
counter.incrementAndGet();
在Java中,所有变量都是按值传递,包括基本类型,如integer
(甚至是对象,但这里可能会让人感到困惑,只需检查there)。
您可能想要使用Integer
,但包装类是不可变的。相反,您可以使用可变的AtomicInteger
。
答案 3 :(得分:0)
作为包装器对象的替代方法(您已经由其他用户提供的答案),您可以使用if-else
语句并直接递增值:
int counterA = 0;
int counterB = 0;
if(condition)
{
counterA++;
}
else
{
counterB++;
}
如果你有超过2个计数器,这可能会变得太过分了。