我有一个HashMap:
private HashMap<String, Integer> cardNumberAndCode_ = new HashMap<String, Integer>();
然后我这样做:
Integer balance = cardNumberBalance_.get(cardNumber); System.out.println(balance); balance = 10; Integer newBalance = cardNumberBalance_.get(cardNumber); System.out.println(newBalance);
第一次打印1000,第二次打印1000,该值不变。为什么Java按值而不是按引用返回Integer?
该get方法返回对存储整数的引用的 副本 。
get
给存储该副本的变量分配一个新值,指向该值10将 不会 更改映射中的引用。
10
如果可以的话,它会工作balance.setValue(10),但是由于Integer是一个不可变的类,因此这不是一个选择。
balance.setValue(10)
Integer
如果要使更改在地图中生效,则必须将余额包装在(可变)类中:
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());
但是您可能想要执行以下操作:
cardNumberBalance_.put(cardNumber, 10);