List list = new ArrayList(); List list1 = new ArrayList(); list.add(list1); // list 中添加了元素list1,list中的第一个元素指向了list1的内存地址 list1.add("a"); // 给list1 的内存地址中添加了一个元素a,下面再打印的时候,自然就打印出list1 中的a 了 int b=0; int a=b; // 将b的值赋给a,此时a 的值为0 b=8; // 再改变b的值,不会影响到a的值
list.add(list1); list1.add("a");其实,你创了建的ArrayList是完全不同的 list.add(list1); 实际是ArrayLIst<ArrayLIst> list = new ArrayList<ArrayList>(); list1.add("a"); 实际是 ArrayList<String> list1 = new ArrayList<String>();
List里面是Object数组实现的,里面有Object[]的引用List list = new ArrayList(); List list1 = new ArrayList(); list.add(list1);你把list1加入到list里面,说明是list里面的数组引用指向了list1的数组引用,当list1里面加入值了,list里面也就有值了int b=0; int a=b; b=8;你把a的值给b,a,b都等于0,然后你又让b指向8,a的指向是不变的,所以还是0public class Student { public String name; public static void main(String[] args) { Student s1 = new Student(); s1.name = "s1"; Student s2 = s1; s2.name = "s2"; System.out.println(s1.name); } }这个你明白吗?
修改为 System.out.println(list1 + " " + list); 看的会清晰一些
[a] [[a]]
list1 包含一个元素 a,打印结果为[a],
list 包含一个元素list1,打印结果就是[[a]] 了。
list的父类AbstractCollection重写了toString方法,让list的元素打印出来为[ ] 包括的。public String toString() {
Iterator<E> it = iterator();
if (! it.hasNext())
return "[]"; StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = it.next();
sb.append(e == this ? "(this Collection)" : e);
if (! it.hasNext())
return sb.append(']').toString();
sb.append(',').append(' ');
}
}
不好意思 是我问题没问清楚, 我意思是为什么不是打印的"[ ]" ,0 , 以一般的理解list1是后面才赋值的。你的代码没怎么看懂, 是在list集合打印的时候,需要是遍历里面的所有元素么。
List list1 = new ArrayList();
list.add(list1); // list 中添加了元素list1,list中的第一个元素指向了list1的内存地址
list1.add("a"); // 给list1 的内存地址中添加了一个元素a,下面再打印的时候,自然就打印出list1 中的a 了 int b=0;
int a=b; // 将b的值赋给a,此时a 的值为0
b=8; // 再改变b的值,不会影响到a的值
list1.add("a");其实,你创了建的ArrayList是完全不同的
list.add(list1); 实际是ArrayLIst<ArrayLIst> list = new ArrayList<ArrayList>();
list1.add("a"); 实际是 ArrayList<String> list1 = new ArrayList<String>();
不好意思 是我问题没问清楚, 我意思是为什么不是打印的"[ ]" ,0 , 以一般的理解list1是后面才赋值的。你的代码没怎么看懂, 是在list集合打印的时候,需要是遍历里面的所有元素么。
4楼已经给出具体回答了,我再补充下。楼主的写法中,第8行是往集合里添加String对象,而第10~12行是对变量赋值,结果当然不是[ ] ,0 。
List list1 = new ArrayList();
list.add(list1);你把list1加入到list里面,说明是list里面的数组引用指向了list1的数组引用,当list1里面加入值了,list里面也就有值了int b=0;
int a=b;
b=8;你把a的值给b,a,b都等于0,然后你又让b指向8,a的指向是不变的,所以还是0public class Student {
public String name;
public static void main(String[] args) {
Student s1 = new Student();
s1.name = "s1";
Student s2 = s1;
s2.name = "s2";
System.out.println(s1.name);
}
}这个你明白吗?