HashMap hm1 = new HashMap();HashMap hm2 = hm1;hm1.put("a",1);System.out.println(hm2);//{a=1}--------------------------------------------------------------
HashMap hm1 = null;HashMap hm2 = hm1;hm1 = new HashMap();hm1.put("a",1);System.out.println(hm2);//null

解决方案 »

  1.   

    hm1,hm2是两个对象地址,指向同一个对象
      

  2.   

    hm2的值是赋值时hm1的当前值
    前者赋值后hm1没有再赋值,而后者赋值后hm1重新赋值,所以结果不一样
      

  3.   

    第一个hm1与hm2都指向同一个hashMap  所以hm1赋值  hm2也指向hm1的值
    第二个hm1与hm2都指向null,hm1在new hashMap后,hm2没有再指向hm1(null和null是不可比较的吧),
    所以第二个hm2为null第一次回答问题,如果回答不正确,希望楼主不要被误导!
      

  4.   

    把hm1 = new HashMap();放在HashMap hm2 = hm1;前面呀,你没有创建实例肯定是NULL
      

  5.   

    第一个 hm1 和hm2 是指向同一个地址,对hm1操作就是对hm2操作,对hm2操作就是对hm1操作,所以会输出:{a=1}
    第二个 hm1 原来是空,hm2也指向空,但是你给hm1了一个地址,而此时hm2还是指向的空,hm1就指向你给的那个地址,他们两个已经没关系了,所以你对hm1进行了操作,你输出hm2 时就会输出 null了。
      

  6.   

    hm1--->[对象1]<---hm2
    hm1--->[对象2]hm1最开始与hm2都指向同一个对象
    当new 时表示在堆里新创建了一个对象把hm1指向它
    hm2还是指向原来的对象 
      

  7.   

    hm2=hm1,这样hm2就是hm1的别名,其实两个是指向同一个对象的,所以你第一个例子里面是改变了hm1,也就同时把hm2改变了
    第二个例子里面你给hm1,重新创建了一次,所以就不在指向原来的对象啦,所以hm1和hm2成了两个不同的对象
      

  8.   

    HashMap hm1 = null; //这相当于声明了个HashMap类型的引用,不指向任何东西。HashMap hm2 = hm1; //此时 hm1 和 hm2 都是null,不指向任何东西。hm1 = new HashMap(); //hm1指向了一个新的对象,hm2还是nullhm1.put("a",1);//此时htm1指向的对象里填了东西而已,对下面的打印没什么影响,因为htm2还是null。System.out.println(hm2);//null