有一个User类,里面有一个Name属性.
在主程序有如下代码
User aUser,bUser;
aUser=new User();
aUser.Name="aaaaa";
bUser=aUser这个bUser并没有实例化,没有分配内存空间,bUser=aUser这样的赋值是附给他一个内存地址,只要修改一个对象的值,另外一个对象的值也会跟着改变,下面我修改了下代码User aUser,bUser;
aUser=new User();
bUser=new User();
aUser.Name="aaaaa";
bUser=aUser
bUser.Name="bbbbb";问题来了,按照我的理解bUser已经实例化且分配了内存空间,但是结果却随着bUser的改变,aUser也跟着改变,求解??没办法引用类型一直弄得个似懂非懂。。见谅,请高手赐教。

解决方案 »

  1.   

    第二个例子,是因为,
    bUser的内存空间被丢掉了因为bUser的内存空间又被你指向了aUser了
    而bUser原来的内存空间现在没有人指向,过一段时间就会被回收了
      

  2.   

    如果你想分开的话,可以这样User aUser,bUser;
    aUser=new User();
    bUser=new User();
    aUser.Name="aaaaa";
    bUser.Name=aUser.Name;
      

  3.   

    bUser即使实例化并分配内存空间,但是你用aUser重新给bUser了,相当于aUser和bUser又指向同一个地址,所以改变一个,另一个值也会变
      

  4.   

    一个实例只有在new后才实际分配内存空间
    bUser没有new,但给它赋了 aUser的值,这时候bUser和aUser实际上都指向对一个对象,这就是引用的特点,只传地址,不复制对象.就象C++的指针不New出来而直接赋值是一样的道理