ArrayList<String> strList = new ArrayList<String>();
ArrayList<Integer> intList = new ArrayList<Integer>();
String str = "Hello world!";
strList.add(str);
System.out.println(strList.get(0));
str = "Bye world!";
System.out.println(strList.get(0));
int num = 911;
intList.add(num);
System.out.println(intList.get(0));
num = 119;
System.out.println(intList.get(0));
运行结果如下:
Hello world!
Hello world!
911
911
简单解释一下吧,当str或者num传给list时,传递的实际是str或num当时的值,即"Hello world!"和911,这样即使后来改变了str和num的内容,list里的值是不会变化的。
但是我们考虑下面这个情况,看起来有些不同
查看源码打印关于ArrayList<ArrayList<String>> listList = new ArrayList<ArrayList<String>>();
listList.add(strList);
System.out.println(listList.get(0));
strList.set(0, "Another world");
System.out.println(listList.get(0));
结果变成了这个样子:
[Hello world!]
[Another world]
咦,咋不一样了?仔细想想,对,确实是值传递,传了strList的值,而这个值是一个字符串的引用,所以当你更改这个引用的时候,字符串的值就变了。
有一点绕,coding之前要三思!
ArrayList<Integer> intList = new ArrayList<Integer>();
String str = "Hello world!";
strList.add(str);
System.out.println(strList.get(0));
str = "Bye world!";
System.out.println(strList.get(0));
int num = 911;
intList.add(num);
System.out.println(intList.get(0));
num = 119;
System.out.println(intList.get(0));
运行结果如下:
Hello world!
Hello world!
911
911
简单解释一下吧,当str或者num传给list时,传递的实际是str或num当时的值,即"Hello world!"和911,这样即使后来改变了str和num的内容,list里的值是不会变化的。
但是我们考虑下面这个情况,看起来有些不同
查看源码打印关于ArrayList<ArrayList<String>> listList = new ArrayList<ArrayList<String>>();
listList.add(strList);
System.out.println(listList.get(0));
strList.set(0, "Another world");
System.out.println(listList.get(0));
结果变成了这个样子:
[Hello world!]
[Another world]
咦,咋不一样了?仔细想想,对,确实是值传递,传了strList的值,而这个值是一个字符串的引用,所以当你更改这个引用的时候,字符串的值就变了。
有一点绕,coding之前要三思!