2014-11-04 90 views
2

是否可以通過引用增加integer值?如何通過引用增加整數?

int counterA = 0; 
int counterB = 0; 

int counter = (condition) ? counterA : counterB; 
//use counter 
counter++; 

結果:counterA + counterB將保持爲0,而是遞增。

+4

不,請使用持有者對象,例如。 'AtomicInteger'。 – 2014-11-04 16:15:03

+0

這太好了,你介意加入這個答案。可能是我在找什麼。 – membersound 2014-11-04 16:18:29

+1

@membersound沒有必要。一個答案與張貼相同的想法:) – 2014-11-04 16:19:17

回答

4

int是一個原始類型,所以沒有引用被賦值,只有值。您可以在類包裝它:

public class IntegerHolder { 
    private int value; 

    public IntegerHolder(int value) { 
     this.value = value; 
    } 

    public void increment() { 
     value++; 
    } 
    ... 
} 
+0

好的,我接受這是一個有效的答案,但可能會直接使用AtomicInteger。 – membersound 2014-11-04 16:20:09

+0

你可以使用Integer類。 – 2014-11-04 16:21:47

+4

@Zéychin不,它是不可改變的。 – assylias 2014-11-04 16:22:02

4

作爲替代一個int持有人也可以使用數組:

int[] counter = new int[1]; 

counter[0]++; 
+1

+爲簡單起見。 – manouti 2014-11-04 16:26:05

0

作爲一個包裝對象的替代(你已經得到了答案由其他用戶提供的),你可以只使用一個if-else語句,並直接增加值:

int counterA = 0; 
int counterB = 0; 

if(condition) 
{ 
    counterA++; 
} 
else 
{ 
    counterB++; 
} 

,如果你有超過2個計數器,雖然這可以變得過於易於使用的。

1

簡短的回答:使用AtomicInteger

AtomicInteger counterA = new AtomicInteger(); 
AtomicInteger counterA = new AtomicInteger(); 

AtomicInteger counter = (condition) ? counterA : counterB; 
counter.incrementAndGet(); 

在Java中,所有變量都傳遞的價值,包括原始類型,如integer(甚至對象,但可以在這裏混淆,只是檢查there)。

您可能會使用Integer,但包裝類是不可變的。相反,您可以使用可變的AtomicInteger