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
它将打印一次罗孚.
原因:
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)
| 归档时间: |
|
| 查看次数: |
165 次 |
| 最近记录: |