Java是按引用还是按值返回
问题内容:
我有一个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
方法返回对存储整数的引用的 副本 。
给存储该副本的变量分配一个新值,指向该值10
将 不会 更改映射中的引用。
如果可以的话,它会工作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);