A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马毅 中级黑马   /  2012-12-10 18:47  /  1613 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

值类型的实例分配在stack上
而引用类型分配在heap上
一直考虑一个问题
     例如:Class是引用类型,那Class中的值类型分配在那?

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

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

6 个回复

正序浏览
Mayi 发表于 2012-12-10 21:34
那就给你举个例子,这是我之前想通的引用类型作为值类型的成员,在堆栈上存储该引用类型的,而其真实的值存 ...

你这么定义了之后,你的结构就会在堆上开辟一个区域,也就是你定义整个结构会在这个堆上区域不是在堆栈了。
回复 使用道具 举报
Sailing. 发表于 2012-12-10 19:36
楼主纠结的问题比较特殊~~~这么说把只要是Class声明都是引用类型,struct声明的都是值类型。在.NET  Framew ...

那就给你举个例子,这是我之前想通的
  1. 值类型
  2. {
  3.        引用类型
  4. }
复制代码
引用类型作为值类型的成员,在堆栈上存储该引用类型的,而其真实的值存储在托管堆上~~
我要的就是介种答案~~
回复 使用道具 举报
{:soso_e141:}
回复 使用道具 举报
楼主纠结的问题比较特殊~~~这么说把只要是Class声明都是引用类型,struct声明的都是值类型。在.NET  Framework清晰的指出了FCL中定义好的类型。故Class声明的类不存在什么值类型,而String也不存在什么Struct 值类型。所以你别在纠结了,人家微软就这么定义的。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
快乐之恋 发表于 2012-12-10 19:00
Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.
】:(1) ...

我说的是类型嵌套怎么分配对象~~~
回复 使用道具 举报
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是结构共同点在于: 我们可以用它们表示事物的类型属性。比如一个学生类  

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马