public class Test1{
public static void main(String args[])
{
List<String> list = new ArrayList<String>();
list.add("黑马_1");
list.add("黑马_2");
list.add("黑马_3");
for(String str:list)
{
System.out.print(str + " ");//打印list的内容
str = "黑马程序员";//重新赋值
System.out.print(str + " ");//打印新的值
}
}
}
输出内容如下:
黑马_1 黑马程序员 黑马_2 黑马程序员 黑马_3 黑马程序员 [黑马_1, 黑马_2, 黑马_3]
分析一下输出过程,第一次,str被赋值list.get(0),即str = list.get(0);所以第一个打印语句输出:黑马_1;str = "黑马程序员";str被重新重新赋值,所以第二个打印语句输出:黑马程序员。楼主肯定是纠结既然str和list.get(0)指向同一个堆地址,既然通过给str赋值改变了内容,为什么list.get(0)的内容为什么没有变,如下图
str刚开始是指向list.get(0);但是被赋值str = "黑马程序员";之前的指向断开了,指向另外的地址了,所以根本不会改变list的内容
|