当前位置: 首页 > news >正文

C# 值类型与引用类型的储存方式_堆栈_

目录

值类型

引用类型

修改stu3的值 stu也被修改了 为什么? (对象之间)

值类型中,值全在栈中单独存储,变量之间不会影响

结构体中,结构体全在栈中,结构体与结构体之间也不会相互影响

静态资源区


值类型

值类型的储存只需要一段储存 用来存放实际的数据  在中储存

int a = 10;

引用类型

需要两段内存

第一段(等式前)储存实际的数据 它在中储存
第二段(等式后) 是一个应用指针,指向数据在内存中储存数据的位置  

地址储存在栈中 通过栈中的地址快速的找到堆中的数据
对象与对象之间不会相互影响  通过new出来的对象都会在堆内存中开辟一块新的空间 

class Student
{public int age;public string name;public Student(int age, string name){this.age = age;this.name = name;}
}static void Main(string[] args)
{Student stu = new Student(20,"小明");Student stu1 = new Student(30,"李四");}

修改stu3的值 stu也被修改了 为什么? (对象之间)

因为将stu中存储的地址赋值给了stu3  它们两个是共用的一个地址 指向同一个堆内存 所以一个修改另外一个也会修改

Student类的对象之间,栈中的 stu3 = stu(stu3没有使用new重新开辟一块新的空间 ),其地址指向同一个堆内存中储存的数据

Student stu3 = stu;
stu3.age = 100;
Console.WriteLine(stu3.age);//100
Console.WriteLine(stu.age); // 20? 100?  输出为100

null  空 空对象 空引用  空对象会被垃圾回收机制回收(GC)

栈内存空间小 读取速度快
堆内存空间大 读取速度慢

值类型中,值全在栈中单独存储,变量之间不会影响

int num = 10;
int num1 = num;
num = 20;
Console.WriteLine(num); //20
Console.WriteLine(num1);//10

结构体中,结构体全在栈中,结构体与结构体之间也不会相互影响

static void Main(string[] args)
{
//结构体全在栈中
Dog d1 = new Dog("阿黄",2);
Dog d2 = new Dog();
// 结构体与结构体之间不会相互影响
d1.age = 100;
Console.WriteLine(d1.age);
Console.WriteLine(d2.age);
Dog d3 = d1;
d1.age = 1000;
Console.WriteLine(d1.age); // 1000
Console.WriteLine(d3.age); // 2 
}struct Dog{public string name;public int age;
//结构体即使 自己定义了 有参的构造函数  默认的无参的也会存在,如定义的 d2,但是类中会被覆盖public Dog(string name, int age){this.name = name;this.age = age;}}

在结构体中,即使自己定义了 有参的构造函数  默认的无参的也会存在,如定义的 d2,但是类中会被覆盖,若使用无参的还得再定义一个无参的构造函数。

静态资源区

 对于字符串常量来说 实际是储存在静态资源区的  即使在堆中用的字符串也是存放在静态资源区的  因为 如果用到重复的字符串时 他们指向的地址是一样的  会解决内存问题  字符串在静态资源区中是不会被改变的   看到的修改其实只是修改指向的位置  内容并没有修改

const string name = "小明";//const 定义常量

 

http://www.xdnf.cn/news/1175563.html

相关文章:

  • 【网络工程师软考版】网络互联设备、网络层协议IP和ICMP
  • Windows 编程辅助技能:速览定义
  • 基于Springboot的中药商城管理系统/基于javaweb的中药材销售系统
  • mac测试ollama llamaindex
  • Ubuntu22.04.5 LTS安装与使用Docker
  • 最长递增子序列(LIS)问题详解
  • dev软件开发阶段的环境代号
  • 9、STM32的启动过程
  • 【STM32】FreeRTOS的移植(一)(详细流程)
  • ​​SBOM 软件供应链安全(转)
  • pandas库
  • 基于YOLOv5+pyQT6的目标检测系统通用项目模板
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(8):自動詞 & 他動詞 「~ている」「~ておく」「~てある」
  • 系统学习算法:专题十四 链表
  • 华为7月23日机考真题
  • 关于在VS2022配置启动项目的问题
  • 表征工程中哪里用到内积 :内积vs余弦相似度--谁更胜一筹?
  • 力扣面试150题--搜索旋转排序数组
  • 开源 Arkts 鸿蒙应用 开发(九)通讯--tcp客户端
  • C#知识点表格大全
  • HDFS写性能优化技巧详解:从理论到实践
  • CSS 基础
  • 【科研绘图系列】R语言绘制黑白填充等显著性标记条形图
  • 网安-SQL注入-sqli-labs
  • 内积(Inner Product)和余弦相似度区别
  • LeetCode热题100--205
  • 糖尿病数据分析:血压与年龄关系可视化
  • 变频器带动电机:全方位解析参数变化
  • SparkSQL 聚合函数 MAX 对 NULL 值的处理
  • Linux -- 进程【下】