java引用和对象
1 引用和对象不明引发的bug?
public class Utils {
public static void main(String[] args) {
List<String> strList = new ArrayList<>();
Utils.test(strList);
System.out.println(strList.size());
}
private static void test(List<String> strList) {
HashMap map = new HashMap();
map.put("1", "a");
strList = Arrays.asList("ab", "c");
System.out.println(strList.size());
}
}
打印的结果是否相同?
结果是不同的
1
0
有很多人会用此代码,去修改入参strList
的值,造成获取不到值的问题!!!
2 原因
入参如果为引用类型,假如命名为strList, 则此入参是传入引用参数的一个拷贝,假如命名为 strList_bak; 他们同时指向同一个对象。 当使用 =
把拷贝引用strList_bak
指向了一个新的内存对象。
具体参考如下图: