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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郭小伟 中级黑马   /  2012-12-22 12:27  /  2213 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

        怎么算是值类型,怎么算是引用类型,都是固定的吗

评分

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

查看全部评分

10 个回复

倒序浏览
基本数据类型传的是参数,引用数据类型传的是地址值
两个存在的位置不同,基本数据类型是在栈区创建,引用数据类型是在堆内存中创建,然后把地址值传递给在栈区的对象,这么说能明白吗

评分

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

查看全部评分

回复 使用道具 举报
所有值类型都继承自System.ValueType,但是ValueType没有附加System.Object包含之外其它任何方法,不过它倒是改写了Equals和GetHashCode两个方法。引用类型变量的Equals比较的是二者的引用地址而不是内部的值,值类型变量的Equals方法比较的是二者的值
值类型不能作为其它任何类型的基类型,因此不能向值类型中增加任何新的虚方法,更不该有任何抽象方法,不可重写

评分

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

查看全部评分

回复 使用道具 举报
值类型: 单元直接存放“有效值” 如: int a=3; 则a内存单元就放的是3
引用类型: 单元放的是另外一个对象的引用(地址) 如: Form form1=new Form(); 就是说,在内存中开辟了一个对象new Form(),form1内存单元存放的是那个对象的地址,并非对象本身

评分

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

查看全部评分

回复 使用道具 举报
董将 发表于 2012-12-22 12:35
基本数据类型传的是参数,引用数据类型传的是地址值
两个存在的位置不同,基本数据类型是在栈区创建,引用 ...

哦哦   大致明白了
回复 使用道具 举报
刘斌 发表于 2012-12-22 13:02
所有值类型都继承自System.ValueType,但是ValueType没有附加System.Object包含之外其它任何方法,不过它倒 ...

上升到类型,有点深奥了啊!
回复 使用道具 举报
王兵 发表于 2012-12-22 13:41
值类型: 单元直接存放“有效值” 如: int a=3; 则a内存单元就放的是3
引用类型: 单元放的是另外一个对象 ...

哦哦,看了你们三个的解释  我大概明白了。谢谢你们三位哈!
回复 使用道具 举报
Value Types and Reference Typesare stored in defferent palces in memory;value types are stored in an area known as the stack, and reerence types are stored in an area known as the managed heap.It's important to be aware of whether a type is a value type or a reference type because of the different effect each assignment has.

In C#, basic data types like bool and long are value types.This means that if you declare a bool variable and assign it the value of another bool variable, you will have two separate bool values in memory..Later if you change the value of the original bool variable, the value of the second bool variable does not change. These types are copied by value.

In constract, most of more complex C# data types, including classes that you yourself declare, are reference types. Tyey are allocated upon the heap, have lifetimes that can span multipile function calls and can be accessed throuth one or several aliases.

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
关于引用类型,是存放在堆中的,由于堆中的内存空间是不连续的,我们在其中开辟空间时,首先遍历到第一块大于等于我们要申请的内存的空间,将它从这个内存中取出来,为了将来不造成内存的泄露,这个内存我们用完就得还回去,怎样还回去呢?我们就要记录它的地址,所以 我们需要用引用类型来标示它。空间是堆中空间,但是标识它的变量在栈中。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
直白点儿说:值类型就是现金,要用直接用;引用类型是存折,要用还得先去银行取现。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
1.将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,
而不复制对象本身。
2.值类型不可能派生出新的类型:所有的值类型均隐式派生自System.ValueType。但与引用类型相同的是,结
构也可以实现接口。
3.值类型不可能包含null 值:然而,可空类型功能允许将null 赋给值类型。
4.每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

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