java - Java是按引用返回还是按值返回

标签 java reference hashmap

我有一个 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/

相关文章:

java - 执行后如何访问Callable Future的参数?

java - 正则表达式无法匹配行开头的空格

ASP.NET网站的BIN目录和引用

java - 解包数据 firestore 查询返回的数组类型

java - 我们可以创建具有动态键和动态值的 HashMap 吗?

java - 如何在 Android 中创建 Hashmap

java - 如何以编程方式为 mysql jdbc 驱动程序设置 rewriteBatchedStatements?

java - 返回匿名类的新对象的方法

java - 为什么对象类型的引用变量在用作其他对象类型时必须进行强制转换

C - fscanf 未从文本文件中正确读取数字