Java中Map1,Map2,Map3,List 出现以下情况的原因?

 

  Map map1 = new HashMap();
  //map1.put("1",1);
  Map map2 = new HashMap();
  map2 = map1;
  map1.put("1", 3);
  Map map3 = new HashMap();
  map1 = map3;
  //map1变化,map2也跟着变化。
/*  注释map1创建了对象,map1这个变量存储在栈里面,创建的那个对象存储在堆里,比如说对象的堆内的内存地址是x 那么站里的map1就会记录   map1的值在内存x的位置上;
  同理map2=map1  就是在栈里记录了,map2的值的位置跟map1的值的位置一样,也在内存x的位置
  然后你操作map2的时候,就是操作内存x位置上的对象,当map2吧对象操作完了,对象还在依然是在内存的x位置,而此时map1的值依然还是在x的位置,所有才会map2改变了对象,map1也跟着改变了
*/
  System.out.println(map1);   //结果:{}
  System.out.println(map2);   //{1=3}
  System.out.println(map3);   //{};
  //map发生改变,list也发生了改变
  List<Map> list = new ArrayList();
  list.add(map1);
  for (Map m : list) {
      System.out.println(m);
      m.put("3", 3);
  }
  System.out.println(list);//{}

版权声明:本文为momo_tianya原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。