我有一个 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
是一个不可变的类,所以这不是一个选项。
如果您希望更改在 map 中生效,您必须将余额包装在一个(可变的)类中:
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);
关于java - Java是按引用返回还是按值返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7297937/