值类型:继承自类型,而又继承自类型

引用类型:直接继承自类型

引用类型_引用类型主要有四种_引用类型存储在什么中

反编译查看其继承;继承之后再说

数据类型分类

值类型

说明(无符号只有正数,有符号有正/负数)

默认值

byte

8位无符号的整数(0 – 255)

short

16位有符号整数(-32,768 – 32,767)

16位无符号整数(0 – 32,767)

int

32位有符号整数(-2,147,483,648 – 2,147,483,647)

uint

32位无符号整数(0 – 2,147,483,647)

long

64位有符号整数(-9,223,372,036,854,775,808 – 9,223,372,036,854,775,807)

ulong

64位无符号整数(- 9,223,372,036,854,775,807)

float

单精度,大约6-9位(±1.5 x 10^−45 至 ±3.4 x 10^38)

0.0f

双精度,大约15-17位(±5.0 × 10^−324 到 ±1.7 × 10^308)

0.0d

货币型,大约28-29位(±1.0 x 10^-28 至 ±7.9228 x 10^28)

0.0m

char

16位无符号字符

’’

bool

true或false

false

结构体

null

enum

枚举

null

引用类型

字符串

null

Array

数组

null

所有类型都派生自

null

值类型与引用类型的区别

简单说下:在内存中最主要的两块区域:栈空间与堆空间

1 在内存中存储位置

1.1 值类型:一般是存放在栈当中,声明并初始化一个值类型变量的时候会在栈中开辟一个空间用于存储该值类型变量的值;栈中的空间大小由系统根据数据类型分配,其变量也是由系统管理;变量存活时间非常短

1.2 引用类型:存放在栈堆中;声明并初始化一个引用类型变量的时候会先在栈中开辟一个存储该变量的地址,在堆中存储该变量的值;堆中的空间由程序员申请,大小不定;其变量是由GC(垃圾回收)管理;变量存活时间由GC决定

以性能来说值类型要比引用类型快,并且由于值类型不存放在堆当中,不由GC的管理,因此使用值类型会缓解托管堆的压力,可以减少了应用程序生存期内的垃圾回收次数

2 在内存中表现形式(局部变量)

2.1 值类型

//声明一个变量
int num1; 
//声明并初始化一个变量
int num2=1;

引用类型主要有四种_引用类型存储在什么中_引用类型

值类型

如果只是声明而未赋值系统会根据类型赋予默认值

栈的特点是:先进后出(了解)

入栈时声明在前的在栈下面,声明在后的在栈上面

出栈时声明在前的先出栈,声明在后的后出栈

2.2 引用类型

//声明一个数组变量
int[] arr1;
//在堆中无指向 因此为null
//声明并初始化一个数组变量
int[] arr2=new int[]{1,2,3};
//通过new 堆中开辟arr2的空间
//并且初始化元素的值(大括号中按次序依次赋值)

引用类型主要有四种_引用类型存储在什么中_引用类型

引用类型

在栈中存储的是该变量在堆中的地址,在堆中存储变量的值

以上说的暂时了解即可,最重要的是在使用时的区别

值类型与引用类型使用的区别

1 值类型

引用类型存储在什么中_引用类型_引用类型主要有四种

值类型

//代表值类型
int num1 = 6;
int num2 = num1;
num2 = 8;
Console.WriteLine("{0} {1}", num1, num2);
Console.ReadKey();

引用类型存储在什么中_引用类型_引用类型主要有四种

断点调试模式下在即时窗口中得到值类型变量的相关信息

值类型时:num2相当于是复制了一份num1因此修改num2不会影响num1的值,反之亦然

2 引用类型

引用类型主要有四种_引用类型存储在什么中_引用类型

断点调试模式下在即时窗口中得到引用类型变量的相关信息

示图中本来应该只有一个堆空间,为表示修改元素值的不会弄了两个堆空间

//代表引用类型
int[] arr1 = new int[] { 1, 2, 3 };
int[] arr2 = arr1;
arr2[0] = 10;
Console.WriteLine("{0} {1}", arr1[0], arr2[0]);
Console.ReadKey();

引用类型存储在什么中_引用类型_引用类型主要有四种

断点调试模型下引用类型

引用类型时:arr2变量指向arr1即堆中地址相同,当修改arr元素的值时就是在修改arr1相关元素的值

总结

值类型:

1) 栈中存储具体的值,减少了托管堆的压力,并且减少了应用程序中垃圾回收次数

2) 将变量赋值给另一变量时,实际上是复制了一份,各自操作不影响各自的值

3) 值类型不一定都存在栈中,如果一个类(class)当中包含了值类型变量那么这个变量实际上也是存储在堆上的

引用类型:

1) 引用类型存储在堆当中使用new 获取的实际上是指向对象在堆中的地址

2) 将变量赋值给另一个变量,实际上是复制的指向堆的地址即两个变量指向的相同的对象,因此不论修改任何一个都会影响另一个具体的值

值类型与引用类型在类与方法等以下说到的都会有影响,因此要尽量理解透

———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,永久会员只需109元,全站资源免费下载 点击查看详情
站 长 微 信: nanadh666

声明:1、本内容转载于网络,版权归原作者所有!2、本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。3、本内容若侵犯到你的版权利益,请联系我们,会尽快给予删除处理!