gpt4 book ai didi

Java返回值、对象引用

转载 作者:行者123 更新时间:2023-12-01 06:38:35 25 4
gpt4 key购买 nike

我已阅读 Jon Skeet 的 [excellent] article关于在Java中传递值和看到的this question关于同一主题。我相信我理解他们但我仍然是什么想知道的是返回值。

当一个对象被返回(如从 getter 中),然后在其原始作用域(从哪里获取它)中被更改时,分配 getter 返回值的变量所拥有的对象引用是否会更改?男孩,真是一口……
借用一个例子:

public class Dog {

String dog ;

public String getName()
{
return this.dog;
}

public Dog(String dog)
{
this.dog = dog;
}

public void setName(String name)
{
this.dog = name;
}

public static void main(String args[])
{
Dog myDog = new Dog("Rover");
String dogName = myDog.getName();
myDog.setName("Max");
System.out.println(dogName);
}
}

打印的是Rover还是Max

更新打印 Rover。

我最初问题的答案很好,但 Richard Tingle 在下面的评论中添加了很多有用的信息,所以我想我应该为后代提供我的测试类。

public class Foo {
private ArrayList<Integer> arrayList;

public Foo() {
arrayList = new ArrayList<Integer>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);

}

public ArrayList<Integer> getArrayList() {
return arrayList;
}

public void addToArrayList(int item) {
arrayList.add(item);
}

public static void main(String args[]) {
Foo foo = new Foo();
ArrayList<Integer> arrayList = foo.getArrayList();
ArrayList<Integer> cloneList = (ArrayList<Integer>)foo.getArrayList().clone();
System.out.println(arrayList.contains(4));
System.out.println(cloneList.contains(4));
foo.addToArrayList(4);
System.out.println(arrayList.contains(4));
System.out.println(cloneList.contains(4));
}

输出为

最佳答案

它将打印一次 Rover。

原因:

 public void setName(String name)
{
this.dog = name;
}

public static void main(String args[])
{
Dog myDog = new Dog("Rover");
String dogName = myDog.getName(); // here you are setting dogName to rover
myDog.setName("Max"); // Here you are setting the String field of a Dog object to "Max" (just reassigning the reference and making it point to Max"
System.out.println(dogName); // DogName is still Rover.
// do dogName = myDog.getName(); and print it.. And see what happens :)
}

关于Java返回值、对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23383303/

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