【值类型、引用类型】

值类型、引用类型简单比较

值类型

值类型值类型是从类System.ValueType中派生。值类型的变量直接包含数据。不能为null(除非类型后加?,例如:int? a)

值类型细分为一下类型:
1、简单类型:整型数值类型、浮点型数值类型、bool类型、字符char
2、枚举类型:enum
3、结构类型:struct

注:(1字节=8位)
int类型大小4字节。4字节等于32位有符号整数类型。
float类型大小4字节。4字节等于32位单精度浮点型,默认值0.0F。
double类型大小8字节。8字节等于64位双精度浮点型,默认值0.0D。
decimal类型大小16字节。16字节等于128位精确的十进制值,默认值0.0M;
什么时候使用float、double、decimal?
1、decimal此类数字通常用于财务应用程序、货币金额(例如 $1.00)、利率(例如 2.625%)等。
2、当优化性能比确保准确度更重要时,可以使用 double 代替 decimal。 然而,除了大多数计算密集型应用程序之外,所有应用程序都不会注意到性能上的任何差异。
3、避免使用 decimal 的另一个可能原因是为了最大限度地降低存储需求。4个字节与16个字节的大小区别。

引用类型

引用类型变量中实际并不存储数据值,而是存储的对数据的引用。换句话说就是,变量中存储的是数据在内存中的位置。

引用类型包括
1、对象类型(object):所有类型(预定义类型、用户定义类型、引用类型和值类型)都直接或间接继承自System.Object基类,可以将任何类型的值赋给 object 类型的变量。
将值类型的变量转换为对象的过程称为装箱。 将 object 类型的变量转换为值类型的过程称为取消装箱(拆箱)。
2、动态类型(dynamic):表示变量的使用和对其成员的引用绕过编译时类型检查。改为在运行时解析这些操作。
在大多数情况下,dynamic 类型与 object 类型的行为类似。 具体而言,任何非 Null 表达式都可以转换为 dynamic 类型。 dynamic 类型与 object 的不同之处在于,编译器不会对包含类型 dynamic 的表达式的操作进行解析或类型检查。 编译器将有关该操作信息打包在一起,之后这些信息会用于在运行时评估操作。 在此过程中,dynamic 类型的变量会编译为 object 类型的变量。 因此,dynamic 类型只在编译时存在,在运行时则不存在。
3、字符串类型(string):string 类型表示零个或多个 Unicode 字符的序列。string 是 System.String的别名。比较两个字符串是否相等或不等(==、!=),比较的是值(而不是引用)。

string a = "hello";
string b = "h";
// Append to contents of 'b'
b += "ello";
Console.WriteLine(a == b);//返回true
Console.WriteLine(object.ReferenceEquals(a, b));//返回false

dynamic和object的区别?
1、dynamic类型变量的类型检查是在程序运行时进行的。而object类型变量的类型检查是在程序编译时进行的。
2、任何类型的值都可以分配给object类型,但是在分配值之前,需要对类型进行转换(装箱和拆箱),而dynamic不需要装箱和拆箱的操作

var 和dynamic类型的区别?
1、var是隐式“类型”(本身不是数据类型),dynamic是动态类型。
2、定义var 变量时必须给一个初始化的值。而dynamic则不用。
3、var 给变量初始化的值后,变量的类型就确定了不能再更改(已经确定了变量类型,不能再更改为其他数据类型)。而dynamic则可以。

值类型和引用类型的区别

值类型和引用类型的区别?
1、值类型在栈中存储数据;引用类型在栈中存储数据的地址,数据存储在堆中。
2、赋值时,值类型复制的的是数据;引用类型复制的的是数据的地址。
3、值类型不可以为null;引用类型可以为null。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值