学习电脑 发表于 2017-8-1 11:27:21

输出问题求解

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, 要怎么改?
要怎么改,求大神!

凉生我怕怕 发表于 2017-8-1 17:15:22

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 20:00:35

凉生我怕怕 发表于 2017-8-1 17:15
ok我的见解如下

首先我得说一句可能我的理解是错误的


没错是你讲的这样,因为是引用传递,所有才会导致这样。
页: [1]
查看完整版本: 输出问题求解