美文网首页程序员
值类型 VS 引用类型

值类型 VS 引用类型

作者: MoZhou | 来源:发表于2016-11-20 23:29 被阅读166次

如果把系统比做是个银行,那么值类型相当于现金,要用直接用;引用类型是存折,要用时得先去银行取现。

值类型和引用类型都继承自System.Object类。不同之处是几乎所有的引用类型都是直接从System.Object继承,而值类型则是继承System.Object的子类System.ValueType类

1.什么是值类型?

直接存储数据,多用于存储不经常改变的值。数据存储在栈上,只存储变量的值。一般存储在栈上。所有的值类型都是seal的,不能被继承。

int i = 10;
int b = i;

CLR会先在栈上给i分配内存空间,然后把10存到这个空间里。然后在栈上给b分配内存空间,然后把i的值10copy 到分配给b的内存空间里。

2.值类型有哪些类别?

  • 简单类型 :有符号整型,无符号整型,字符类型,浮点类型,布尔类型
  • 枚举类型 :enum
  • 结构体类型 :struct

3.什么是引用类型?

存储数据的引用(内存地址),数据存储在堆中

A ref;//声明类
A a = new A()//实例化类

声明一个类时,CLR只会在栈中分配一小块内存用于存放地址,并没有为其分配堆上的内存空间。

new操作符返回对象的内存地址(即指向对象数据的内存地址)所以实例化一个类时,CLR会为实例分配堆上的空间,并且会把该实例堆上空间的地址保存到栈上为a分配的内存空间中。

4.引用类型有哪些类别?

  • 类类型 : string / class
  • 数组类型
  • 接口类型
  • 委托类型

5.为什么要有值类型?

为了用来存储基本的生命周期比较短不经常被改变的值数据,直接操作内存,查找起来比较方便,减小系统开销。

6.为什么要有引用类型?

存储得是对象的内存地址,需要先解析引用地址才能拿到对象。但是可以直接操作同一对象,不会像值类型一样每次都分配内存空间消耗内存。

7.生命周期什么时候结束?

  • 值类型 :离开函数体会被销毁
  • 引用类型 :没有被引用的地方时

8.GC什么时候回收?

当生命周期结束后,GC会统一回收

9.为什么值类型继承System.ValueType类却不是引用类型?

System.ValueType本身是一个引用类型,由于它重写了Equals()方法,所以对值类型按照实例的值来比较,而不是引用地址来比较。

相关文章

  • value type vs reference type in

    swift 中 值类型 vs 引用类型 整理如下: 类型存储备注比喻Value Type 值类型Get Store...

  • 值类型 VS 引用类型

    如果把系统比做是个银行,那么值类型相当于现金,要用直接用;引用类型是存折,要用时得先去银行取现。 值类型和引用类型...

  • 值类型 vs 引用类型

    相信很多人面试的时候都被问到过,大家那心里都很清楚他们的区别。但是当我们想以一种比较官方话讲出来时觉得一时,不知道...

  • 慕课网-前端JavaScript面试技巧笔记

    js中使用 typeof 能得到哪些类型? 考察点:JS变量类型值类型VS引用类型,引用类型可以无限制扩展属性 何...

  • struct 和 class

    值类型 VS 引用类型 值类型和引用类型的核心不同就是数据和数据的存储位置。我们用局部变量、参数、属性和全局变量来...

  • 10月18日C#学习总结

    今天老师讲了值类型 vs.引用类型、数据的引用类型、数据的值类型、装箱和拆箱、运算符与表达式和方法重载。 C#中所...

  • 一.C#中值类型与引用类型

    总结:值类型直接存储其值,引用类型存储对值的引用,值类型存在堆栈上,引用类型存储在托管堆上,值类型转为引用类型叫做...

  • 慕课网《前端JavaScript基础面试技巧》学习笔记

    变量类型 值类型和引用类型 值类型只能存储一个值 值类型复制就是值类型本身 引用类型复制只是复制引用类型的指针 引...

  • Structs vs classes(值类型vs引用类型)

    我们知道classes是引用类型,structs属于值类型。这就意味着,当你传递一个class,Swift传递的是...

  • 面试

    值类型和引用类型 值类型和引用类型的区别是值类型直接存储其值,而引用类型存储对值的引用。这两种类型存储在内存的不同...

网友评论

    本文标题:值类型 VS 引用类型

    本文链接:https://www.haomeiwen.com/subject/mggypttx.html