【发布时间】:2017-01-22 06:14:02
【问题描述】:
我是 Java 新手,对此代码的输出有疑问
public class Employee{
private String name;
private int age;
private List<String> stationeryList;
public Employee(String name, int age, List<String> stationeryList)
{
this.name= name;
this.age = age;
this.stationeryList = stationeryList;
}
// getter methods
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public List<String> getStationeryList()
{
return stationeryList;
}
}
public static void main(){
String name = "XYZ";
int age = 34;
List<String> list = new ArrayList<String>();
list.add("Chair");
Employee emp = new Employee(name, age, list);
list.add("Desk");
for(String str:emp.getStationeryList())
System.out.println(str);
}
这会同时打印椅子和办公桌,而我原本希望它只打印椅子,因为当我们创建 emp 对象列表时只有椅子。谁能解释一下这背后的原因。
【问题讨论】:
-
@yashpandey 其实Java是传值的,但是传的值是对列表的引用。
-
@yashpandey Java 不是通过引用传递的,这与问题无关。
-
@shmosel 是的,我错了,谢谢,我澄清了,它按值传递引用。
-
@ModusTollens,所以在这种情况下,emp.getStationerList 是对实际列表的引用,因此当他遍历它时,输出是椅子和桌子的实际内容,而不是什么他通过了,它只是一个参考。
-
@yashpandey 是的,这是正确的。传递的值是对现有列表的引用。