基元类型,引用类型,值类型

一、基元类型

编译器直接支持的数据类型就是基元类型

基元类型直接映射到Framework类库(FCL)中存在的类型。例如int直接映射到System.Int32,如下

//定义一个32位
System.Int32 a = new System.Int32()

//简化语法
int a = 0;

FCLl类型在C#都有对应的基元类型

在这里插入图片描述

二、引用类型和值类型

CLR支持两种类型:引用类型和值类型。虽然FCL的大多数类型都是引用类型,但程序员用得最多的还是值类型。引用类型总是从托管堆分配,C#的new操作符返回对象内存地址——即指向对象数据的内存地址。使用引用类型必须留意性能问题。首先要认清楚以下四个事实。

  1. 内存必须从托管堆分配。
  2. 堆上分配的每个对象都有一些额外成员,这些成员必须初始化。
  3. 对象中的其他字节(为字段而设)总是设为零。
  4. 从托管堆分配对象时,可能强制执行一次垃圾回收。

两者的区别:
在这里插入图片描述

在这里插入图片描述

三、值类型装箱拆箱

将值类型转换成引用类型要使用装箱机制。下面总结了对值类型的实例进行装箱时所发生的事情。

  1. 在托管堆中分配内存。分配的内存量是值类型各字段所需的内存量,还要加上托管堆
    所有对象都有的两个额外成员(类型对象指针和同步块索引)所需的内存量。
  2. 值类型的字段复制到新分配的堆内存。
  3. 返回对象地址。现在该地址是对象引用;值类型成了引用类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有诗亦有远方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值