黑马程序员技术交流社区

标题: 值类型和引用类型 [打印本页]

作者: 马毅    时间: 2012-12-10 18:47
标题: 值类型和引用类型
值类型的实例分配在stack上
而引用类型分配在heap上
一直考虑一个问题
     例如:Class是引用类型,那Class中的值类型分配在那?

             String是引用类型,那位于Struct中的String呢?


作者: 快乐之恋    时间: 2012-12-10 19:00
Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.
】:(1)值类型和引用类型的区别: 值类型,如int j,i=1; j=i;//赋值操作之后j的值也是1;但是j的1也是在内存中独自开辟一块堆栈空间的,它不依附与i;感觉就是系统在内存堆栈中为其分配了一块空间,值就存储在其中; 引用类型, class A{ private int i; A(int x){i=x} };...
给点悬赏分啊 class是类,struct是结构共同点在于: 我们可以用它们表示事物的类型属性。比如一个学生类  
作者: 马毅    时间: 2012-12-10 19:05
快乐之恋 发表于 2012-12-10 19:00
Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.
】:(1) ...

我说的是类型嵌套怎么分配对象~~~
作者: Sailing.    时间: 2012-12-10 19:36
楼主纠结的问题比较特殊~~~这么说把只要是Class声明都是引用类型,struct声明的都是值类型。在.NET  Framework清晰的指出了FCL中定义好的类型。故Class声明的类不存在什么值类型,而String也不存在什么Struct 值类型。所以你别在纠结了,人家微软就这么定义的。
作者: 快乐之恋    时间: 2012-12-10 21:01
{:soso_e141:}
作者: 马毅    时间: 2012-12-10 21:34
Sailing. 发表于 2012-12-10 19:36
楼主纠结的问题比较特殊~~~这么说把只要是Class声明都是引用类型,struct声明的都是值类型。在.NET  Framew ...

那就给你举个例子,这是我之前想通的
  1. 值类型
  2. {
  3.        引用类型
  4. }
复制代码
引用类型作为值类型的成员,在堆栈上存储该引用类型的,而其真实的值存储在托管堆上~~
我要的就是介种答案~~
作者: Sailing.    时间: 2012-12-10 22:08
Mayi 发表于 2012-12-10 21:34
那就给你举个例子,这是我之前想通的引用类型作为值类型的成员,在堆栈上存储该引用类型的,而其真实的值存 ...

你这么定义了之后,你的结构就会在堆上开辟一个区域,也就是你定义整个结构会在这个堆上区域不是在堆栈了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2