public static void main(String[] args) {
Map map = new HashMap();
map.put("12313", "12313");
System.out.println(map);
System.out.println("-----------");
clearMap(map);
System.out.println(map);
}
private static void clearMap(Map<String, String> map) {
map = new HashMap<String, String>();
map.put("add", "addd");
}
为什么打印结果是
{12313=12313}
但是
public static void main(String[] args) {
Map map = new HashMap();
map.put("12313", "12313");
System.out.println(map);
System.out.println("-----------");
clearMap(map);
System.out.println(map);
}
private static void clearMap(Map<String, String> map) {
map.put("add", "addd");
}
打印出来的却是:
{12313=12313, add=addd}
1.方法之间传递的是引用地址,第一个传递了一个引用的地址给clearMap,
但是你的new操作将地址指向了另外一个堆内存对象,然后对新的堆内存对象进行操作,
所以不会改变第一个对象。
2.第二个你没有改变其引用,直接在第一个对象上进行操作
3.你两次输出的都是第一个对象
综上所述,就能解释你的输出了,这里不好画图,要是能画图,你应该一看就明白了
希望能够帮到你....
第一个 例子 我可以解释为 ,clearMap 方法 操作的那个map引用是个局部变量,那方法生命周期结束了,map就消失了,所以main方法中的map一直没变,
但是第二个例子又告诉我,clearMap 操作的就是传递过来的引用,所以就是操作实际的对象,main方法中的map被改变了。。
我在学习java的时候就告诉我 基本类型和引用类型的区别。。第一个例子map表现的就是基本类型,第二个例子map表现则是正常的引用类型,也是我想象中的
。
所以求大神 指导,这到底是为啥。。。。。。。。。。。。。。
实践是真理检验的唯一标准,你在需要记录的地方打印map的地址值就应该能明了
画的不好,凑合看吧