博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
值类型和引用类型
阅读量:5162 次
发布时间:2019-06-13

本文共 982 字,大约阅读时间需要 3 分钟。

参考:;;

一、概念

值类型:直接存储值,在栈上存储其值 (注:值类型变量声明后,不管是否已经赋值,编译器为其分配内存)

引用类型:存储对其值的引用,在栈上存储地址,在堆上存储值

注:引用类型当声明一个类时,只在栈中分配一小片内存用于容纳一个地址,而此时并没有为其分配堆上的内存空间,当使用new 创建一个类的实例时,分配堆上的空间,并把堆上空间的地址保存到栈上分配的小片空间中。

 

值类型和引用类型在内存开辟空间的方式?

根据上图分析:

int number = 10; 是值类型,直接在栈中开辟空间。

string s = "123";是引用类型,在栈中也开辟空间,在栈上存放的是在堆中的地址(引用)。每当在内存中开辟空间,都会有对应的地址。

 

二、对比

 相同点:

引用类型可以实现接口,值类型当中的结构体也可以实现接口;

引用类型和值类型都继承自System.Object类;

不同点:

      1.值类型实例通常时在线程栈上分配的(静态分配),但是在某些情形下可以存储在栈中。

         引用类型的对象总是在进程对方中分配(动态分配) 

       2.值类型在栈内分配空间大小因变量类型而异;引用类型在栈内的空间大小相同

       3.将一个值类型变量赋值给领域给值类型变量时,将复制包含的值 

       4.引用类型变量的赋值只复制对对象的引用,而不复制对象本身 

          1)值类型不可能派生出新的类型:所有的值类型均隐士派生自System.ValueType

          2)值类型不可能包含null值

三、栈和堆的区别

栈是编译期间就分配好的内存空间,因此代码中必须旧栈的大小有明确的定义;局部值类型变量、值类型参数等都在栈内存中

堆是程序运行期间动态分配的内存空间,可以根据程序的运行情况确定要分配的堆内存的大小。

四、.Net中哪些是值类型?哪些是引用类型?

值类型:

       基本数据类型:整型:int

                              长整形:long

                              浮点型:float(32位)double(64位)

                              字符型:char

                              布尔型:bool

       枚举类型:枚举:enum

       结构类型:结构:struct

引用类型:

       类:

              基类:System.Object

              字符串:string

              自定义类:class

       接口:interface

       数组:in[] , string[]

 

转载于:https://www.cnblogs.com/juneyss/p/11233508.html

你可能感兴趣的文章
sizeof与strlen的用法
查看>>
Linux 下常见目录及其功能
查看>>
开源框架中常用的php函数
查看>>
nginx 的提升多个小文件访问的性能模块
查看>>
set&map
查看>>
集合类总结
查看>>
4.AE中的缩放,书签
查看>>
CVE-2014-6321 && MS14-066 Microsoft Schannel Remote Code Execution Vulnerability Analysis
查看>>
给一次重新选择的机会_您还会选择程序员吗?
查看>>
Mysql MHA高可用集群架构
查看>>
心急的C小加
查看>>
编译原理 First,Follow,select集求法
查看>>
java 浅拷贝和深拷贝
查看>>
vue实例中中data属性三种写法
查看>>
uva1636 - Headshot(条件概率)
查看>>
iOS开发 runtime实现原理以及实际开发中的应用
查看>>
488 - Triangle Wave
查看>>
BZOJ2437 NOI2011兔兔与蛋蛋(二分图匹配+博弈)
查看>>
android 学习资源网址
查看>>
shell基础
查看>>