Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

值与引用的相关问题

一、如何判断是值类型和引用类型?

F12 进到类型的内部去查看

  • 是 class 就是引用
  • 是 struct 就是值

二、语句块

  • 命名空间
  • 类、接口、结构体
  • 函数、属性、索引器、运算符重载等(类、接口、结构体)
  • 条件分支、循环

问题:

  1. 我们的逻辑代码写在哪里? 函数、条件分支、循环-中底层语句块中
  2. 我们的变量可以申明在哪里? 上、中、底都能申明变量
    • 上层语句块中:成员变量
    • 中、底层语句块中:临时变量

总结:

  • 上层语句块:类、结构体
  • 中层语句块:函数
  • 底层的语句块: 条件分支 循环等

三、变量的生命周期

编程时大部分都是 临时变量 在中底层申明的临时变量(函数、条件分支、循环语句块等) 语句块执行结束 没有被记录的对象将被回收或变成垃圾

  • 值类型:被系统自动回收
  • 引用类型:栈上用于存地址的房间被系统自动回收,堆中具体内容变成垃圾,待下次 GC 回收

想要不被回收或者不变垃圾,必须将其记录下来 如何记录? 在更高层级记录或者,使用静态全局变量记录

四、结构体中的值和引用

结构体本身是值类型 前提:该结构体没有做为其它类的成员

  • 在结构体中的值,栈中存储值具体的内容
  • 在结构体中的引用,堆中存储引用具体的内容

引用类型始终存储在堆中,真正通过结构体使用其中引用类型时只是顺藤摸瓜

五、类中的值和引用

类本身是引用类型

  • 在类中的值,堆中存储具体的值
  • 在类中的引用,堆中存储具体的值

值类型跟着大哥走,引用类型一根筋

六、结构体继承接口

利用里氏替换原下,用接口容器装载结构体存在装箱拆箱

评论