Java返回值,对象引用

lim*_*nut 0 java scope return-type return-value

我已经阅读了Jon Skeet 关于在Java中传递值的[优秀]文章,并在同一主题上看到了这个问题.我相信我理解他们,但我仍然想知道的是回报价值.

当一个对象被返回时(来自一个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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这会打印Rover还是Max

更新 是否打印流动站.

我原来问题的答案很棒,但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));
}
Run Code Online (Sandbox Code Playgroud)

输出为false,false,true,false

The*_*ind 6

它将打印一次罗孚.

原因:

 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 :)
    }
Run Code Online (Sandbox Code Playgroud)