同事遇到一个问题,我觉得蛮有意思的
集合在sortList方法中处理后,左边使用clear()是正常显示处理后的数据,右边使用 new ArrayList却是显示处理前的数据。
简单还原:
@Test
public void listTest(){
List<String> test = new ArrayList<>();
test.add("as");
test.add("ad");
System.out.println("处理前"+test);
test(test);
System.out.println("处理后"+test);
}
private void test(List<String> msg){
System.out.println("进入处理方法前"+msg);
msg = new ArrayList<>();
System.out.println("进入处理方法后"+msg);
}
@Test
public void listTest(){
List<String> test = new ArrayList<>();
test.add("as");
test.add("ad");
System.out.println("处理前"+test);
test(test);
System.out.println("处理后"+test);
}
private void test(List<String> msg){
System.out.println("进入处理方法前"+msg);
msg.clear();
System.out.println("进入处理方法后"+msg);
}
原因:
hashCode用来在散列存储结构中确定对象的存储地址
Java中hashCode的作用
Java基础之Map的clear和new的区别