gpt4 book ai didi

java - 通过 Java 中的另一个函数传递字典值时通过引用更新字典值

转载 作者:行者123 更新时间:2023-12-02 09:39:42 26 4
gpt4 key购买 nike

我是 Java 新手,想知道是否可以在字典本身之外更新字典的值。我认为我通过在 ID2 中的“process”方法中创建一个新实例来失去与“nodesInincluded”集的连接。有没有什么巧妙的方法可以始终跟踪字典中值下面的对象。

抱歉,我最初粘贴了错误的代码:)


public class Dictionary {

@AllArgsConstructor
private class Info {
private Double average;
private Set nodesIncluded;
}

private void initialize(){
Map<String, Info> testDict = new HashMap<String, Info>(){{
put("ID001", new Info(1.0d, new HashSet<>(Arrays.asList("a", "b"))));
put("ID002", null);
}};

Info takenOut01 = testDict.get("ID001");
Info takenOut02 = testDict.get("ID002");

process(takenOut01, "c");
process(takenOut02, "c");

System.out.print(testDict.get("ID001").nodesIncluded.contains("c")); // true
System.out.print(testDict.get("ID002").nodesIncluded.contains("c")); // NullPointerException
System.out.print(testDict.get("ID002").nodesIncluded.contains("default")); // NullPointerException
}

private void process (Info takenOut, String newValue ) {
if (takenOut == null) {
takenOut = new Info(0.0d, new HashSet<>(Arrays.asList("default")));
}
takenOut.nodesIncluded.add(newValue);
}

public static void main(String[] args) {
Dictionary test = new Dictionary();
test.initialize();
}
}

最佳答案

Java 按值传递,但是当涉及到对象时,就有点困惑了。当对象通过方法传递时,它的引用值也会被传递。这意味着在方法范围内对对象执行的操作会影响其范围之外的对象。

public static class Bar {
private int num = 0;
public int getNum() { return num; }
public void setNum(int num) { this.num = num; }
}

public static void setBar5(Bar bar) {
bar.setNum(5);
System.out.println(bar.getNum()); // outputs 5
}

public static void main(String[] args) {
Bar bar = new Bar();
setBar5(bar);

System.out.println(bar.getNum());
}

简而言之,如果您持有对 Collection 内的对象的对象引用,则对其进行的任何操作都会看起来像您正在修改它。

Bar bar = new Bar();
List<Bar> bars = new ArrayList<>();
bars.add(bar);
bar.setNum(5);

for(Bar b : bars) {
System.out.println(b.getNum());
}
// outputs 5

如果从集合中获取对象并修改它,它也会影响保存该对象的任何变量。

Bar bar2 = bar;

// modifying the element in the collection
bars.get(0).setNum(4);

// Even when we modify bar, bar2 gets affected.
System.out.println(bar2.getNum()); // outputs 4

关于java - 通过 Java 中的另一个函数传递字典值时通过引用更新字典值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57197237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com