在执行②的时候,虚拟机又实例化了一个对象,且将这个新的对象的引用地址给了user,所以才会有这种情况。
举个例子,把user看成书的目录第一章节,第一次实例的时候,指向了100页,然后你把第100页的内容放到了map中,但是你执行②的时候,这个第一章节的指向会执行别的页,比如说120页,然后你对第120页的内容进行修改,那么肯定不会影响第100页的内容的。
求分 

解决方案 »

  1.   

    user的句柄在第二段被替换了,但是map里存的是旧句柄。
    有这个疑惑说明lz还没有分清=赋值的意义。
      

  2.   

    java里通过句柄操作对象,但是map里存进去的句柄user,user在②这个地方发生了改变,指向了一个新的对象,为什么map里的那个user句柄不发生改变呢?他们应该是同一个啊。这即是我的疑惑。
      

  3.   

    user这个对象指向的内存中一个地址,向map中添加之后就是map中的key指向了这个地址,同时user也指向它,但是当你给user赋值之后它指向的地址就改变了,但是map中的key所指的地址仍然是原来的那个,变的只是user,也就是说map的key存的是你添加时候让他指向的那个地址,而不是存的user,所以user变了,map中的key不变。
    希望能帮到你