Does Java return by reference or by value
The get
method returns a copy of the reference to the stored integer...
Assigning a new value to the variable storing this copy in order to point to the value 10
will not change the reference in the map.
It would work if you could do balance.setValue(10)
, but since Integer
is an immutable class, this is not an option.
If you want the changes to take affect in the map, you'll have to wrap the balance in a (mutable) class:
class Balance {
int balance;
...
}
Balance balance = cardNumberBalance_.get(cardNumber);
System.out.println(balance.getBalance());
balance.setBalance(10);
Balance newBalance = cardNumberBalance_.get(cardNumber);
System.out.println(newBalance.getBalance());
But you would probably want to do something like this instead:
cardNumberBalance_.put(cardNumber, 10);
The Integer variable contains a reference to an Object. The Integer object is immutable and you cannot change it. When you perform
balance = 10; // replace the previous Integer reference with a different one.
The normal way to do this is to use
cardNumberBalance_.put(cardNumber, 10);
An alternative which is not used so often is to use AtomicInteger or use your own MutableInteger
private final Map<String, AtomicInteger> cardNumberAndCode_ = new HashMap<String, AtomicInteger>();
AtomicInteger balance = cardNumberBalance_.get(cardNumber);
balance.set(10);