gpt4 book ai didi

java - 对象与原始传递在 Java 中如何工作(在集合的上下文中)?

转载 作者:行者123 更新时间:2023-11-30 08:28:34 24 4
gpt4 key购买 nike

所以我已经阅读了这个链接:here .但我对这个话题还不是 100% 清楚。

如果我有一个任意集合说:

public Set<Integer> hello () {
Set<Integer> hi = new HashSet<Integer>();
hi.add(3);

doWork(hi);
return hi;
}

static void doWork(Set<Integer> set) {
set.add(1);
return;
}

this.hello() 调用会返回 [1][1, 3]

如果我们做类似的事情会怎样:

public Set<Integer> hello () {
Set<Integer> hi = new HashSet<Integer>();
hi.add(3);

doWork(hi);
return hi;
}

static void doWork(Set<Integer> set) {
Set<Integer> temp = set;
temp.add(1);
return;
}

此外,由于我仍然不完全清楚它如何传递基元和对象之间的区别 - 它是一组整数(基元类型)这一事实是否会产生任何影响?(我想 Set 是一个 Object,所以这不是 Collections 的问题)

如果我们有更复杂的东西,比如

Class Dog {
String name;
Dog(String name) {
this.name = name;
}

public void setName(String newName) {
name = newName;
}
}

public Set<Dog> hello () {
Set<Dog> hi = new HashSet<Dog>();
hi.add(new Dog("Woof");

doWork(hi);
return hi;
}

static void doWork(Set<Dog> set) {
Set<Dog> temp = set;

for (Dog d : temp)
d.setName("Bark");
d = new Dog("Ruff");
d.setName("Charles");

return;
}

狗的名字是什么,其他狗的名字会怎样?

最佳答案

它将返回 [1, 3] 因为你传递的是同一个集合。

在第二种情况下,它会再次返回 [1, 3],因为引用了同一个对象。

简而言之:您传递了相同的对象,并修改了它的状态(在集合的情况下,状态是集合中的元素)

关于java - 对象与原始传递在 Java 中如何工作(在集合的上下文中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20145539/

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