对于这段代码
Person test;
test = (Person)Person.Clone();
我想问的是:
首先类是引用类型的,引用类型在储存值的时候是先创建一个指针然后再储存具体的值,每个类在定义的时候是不占内存空间的只有在实例化的之后才会向内存去要空间,在储存值的时候引用类型将值的指针放在了内存中的栈中,而将实际的值放在了对中,因此才叫引用类型!
http://topic.csdn.net/u/20090226/00/1cc0d81e-8b7f-40bf-bb39-d882270215d6.html1.那么在代码第一句中就没有申请空间,而第二句代码也不是分配空间,只是将Person类进行浅表复制,再将值传递过去,其过程如何?内存如何分配?
2.还有
Person test=new Person();
Person test1=new Person();
test=test1;
和下面这段代码
Person test;
Person test1=new Person();
test=test1;
有和区别?
请各位大神赐教!!!感激不尽!
Person test;
test = (Person)Person.Clone();
我想问的是:
首先类是引用类型的,引用类型在储存值的时候是先创建一个指针然后再储存具体的值,每个类在定义的时候是不占内存空间的只有在实例化的之后才会向内存去要空间,在储存值的时候引用类型将值的指针放在了内存中的栈中,而将实际的值放在了对中,因此才叫引用类型!
http://topic.csdn.net/u/20090226/00/1cc0d81e-8b7f-40bf-bb39-d882270215d6.html1.那么在代码第一句中就没有申请空间,而第二句代码也不是分配空间,只是将Person类进行浅表复制,再将值传递过去,其过程如何?内存如何分配?
2.还有
Person test=new Person();
Person test1=new Person();
test=test1;
和下面这段代码
Person test;
Person test1=new Person();
test=test1;
有和区别?
请各位大神赐教!!!感激不尽!
解决方案 »
- 大家帮忙看看 急 为什么老是出现死锁
- 如何直接在datagridview中某个单元格添加修改并且更新到数据库中
- 各位好,小弟我的问题(关于调用DLL)急!!! 我又来了!
- 可以告诉我如何去学C#吗?谢谢!
- 问一个关于datagrid的问题
- splitter在form上分割左右两个控件时,属性dock为fill的控件宽度很窄时不会出现横向滚动条,怎么办?
- 如何WMI运行批处理文件
- winform中如何实现自动点击webbrowser弹出对话框中的确定按钮
- 关于改变控件边框的颜色??急急
- 高分:谁知道ReportDocument的用法呀,好像和printDocument很不一样呀,请高手指点一下啦
- 棋盘问题
- C#Ktv
前面是内存中有两个 Person 实例; 后面是仅有一个 Person, test 指向 test1.至于问题 1。 不知道你的 Person 是什么东西。。但是如果 Person 没有实例化,而又调用了它的成员方法。。通常会得到一个 Null Exception。
Person test=new Person();
Person test1=new Person();
test=test1;
和下面这段代码
Person test;
Person test1=new Person();
test=test1;
------------------
Person test=new Person();
Person test1=new Person();
很显然,你这样做会在堆中 分配两块这种类型的内存,然后test=test1;仅仅是吧test1地址给了test问题一 没太看明白你的意思!呵呵
Person test=new Person();
Person test1=new Person();
test=test1;
和下面这段代码
Person test;
Person test1=new Person();
test=test1;
这两个的效果一样。就是第一种多了个分配的内存,后来丢弃了而已。
按照你的意思是说在栈上储存了两个堆上的地址,但是只用了其中一个。另一个浪费了。另外对于我的第一个问题,我的Person只是一个类,我是那样写的,运行完全正常。
求解答?
Person Person1=new Person()
Person test;
test = (Person)Person1.Clone();
是这样的。
谢谢!!!
下面的那些楼上的已经解释很清楚了
我只说一下个人对
Person Person1=new Person()
Person test;
test = (Person)Person1.Clone();
的理解貌似这个算浅度复制吧 结果应该仅仅是 test指向了person1一样的地址,在这个地址中指向实际存储这个对象的地址
这个时候仅仅在栈上储存了一个引用,并没有存储test这个对象
下面那一句也是得到了一个Person对象,相当新建一个Person实例,此时在托管堆上分配内存,并将test的值设置为分配给Person对象的内存地址2、两者的最后结果没啥区别
但是Person test和Person test=new Person();
是有区别的,前者这时只是在堆栈中存了一个引用,在托管队上并没有存储,而后者在托管堆上已经分配了内存