ArrayList的get(index)方法,add(Object obj)方法是值传递还是引用传递
测试程序:
public class ArrayListTest {
/**
* @param args
*/
public static void main(String[] args) {
ArrayList<HashMap<String ,String>> al = new ArrayList<HashMap<String ,String>>();
HashMap map = new HashMap<String, String>();
map.put("aa", "aaaa");
System.out.println("map:" + map.get("aa"));
al.add(map);
HashMap item = al.get(0);
item.put("aa", "bbbb");
System.out.println("al.get(0).get(\"aa\"):" + al.get(0).get("aa"));
System.out.println("map:" + map.get("aa"));
}
}
输出结果:
map:aaaa
al.get(0).get("aa"):bbbb
map:bbbb
结论:当泛型为引用类型时,add(Object obj)方法,是将对象obj的引用(即obj的内存地址)加入到了arraylist中进行存储;
同理,get(index)方法返回的是对象的引用,对对象的属性进行修改,会同步修改ArrayList中对象的属性值,以及对象obj中的值。
在本例中,即是 map,al.get(0),item,指向的是同一个内存地址,相当于这个内存地址的3个别名,通过这3个别名都能操作这块内存区域
public class ArrayListTest {
/**
* @param args
*/
public static void main(String[] args) {
ArrayList<HashMap<String ,String>> al = new ArrayList<HashMap<String ,String>>();
HashMap map = new HashMap<String, String>();
map.put("aa", "aaaa");
System.out.println("map:" + map.get("aa"));
al.add(map);
HashMap item = al.get(0);
item.put("aa", "bbbb");
System.out.println("al.get(0).get(\"aa\"):" + al.get(0).get("aa"));
System.out.println("map:" + map.get("aa"));
}
}
输出结果:
map:aaaa
al.get(0).get("aa"):bbbb
map:bbbb
结论:当泛型为引用类型时,add(Object obj)方法,是将对象obj的引用(即obj的内存地址)加入到了arraylist中进行存储;
同理,get(index)方法返回的是对象的引用,对对象的属性进行修改,会同步修改ArrayList中对象的属性值,以及对象obj中的值。
在本例中,即是 map,al.get(0),item,指向的是同一个内存地址,相当于这个内存地址的3个别名,通过这3个别名都能操作这块内存区域