输出问题求解
package imooc.imooc.collection;import java.util.LinkedList;
class Students{
private String[]stu;
public String[] getStu() {
return stu;
}
public Students(String []stu) {
this.stu = stu;
}
}
public class Test {
public static void main(String[] args) {
LinkedList<Students> list = new LinkedList<Students>();
String []s2 = new String;
s2 = "1";
s2 = "2";
list.add(0,new Students(s2));
s2 = "3";
s2 = "4";
list.add(1,new Students(s2));
Students s = list.get(0);
System.out.println(s.getStu());
System.out.println(s.getStu());
Students s1 = list.get(1);
System.out.println(s1.getStu());
System.out.println(s1.getStu());
}
}
为什么输出的是 3 4 3 4 , 而不是 1 23 4, 要怎么改?
要怎么改,求大神!
ok我的见解如下
首先我得说一句可能我的理解是错误的
String []s2 = new String此处你创建了一个 str数组 长度为2
也就是说 目前申请了ss 这两个地址
list.add(0,new Students(s2));以后把 s 和 s的地址放入 students 然后再放入 list 中
s2 = "3";s2 = "4";注意这行代码这行代码就是关键了,你的 3 和4是存储在 s s 地址
所指向的值,也就是说 s s 这两个地址所指向的值已经被你修改成了3和4
那么回到上面 你把 s s 的地址值 给 第一个 Students.注意 是地址,而不是地址指向的值.
所以当你 s2 = "3";s2 = "4"; 的时候也会 修改到 第一个students 的 值 .
故此 你 list 里面两个 students的stu属性 都成了34,最终打印效果为3434
如果你不信的话,可以下断点 debug 查看当你 第一次add 到list 以后
执行 s2 = "3";s2 = "4";然后 再回去查看你的 list里面的第一个 students 里的stu属性已经变成了34
纯属手打,觉得看懂的的话可以给个赞哈哈哈XD
凉生我怕怕 发表于 2017-8-1 17:15
ok我的见解如下
首先我得说一句可能我的理解是错误的
没错是你讲的这样,因为是引用传递,所有才会导致这样。
页:
[1]