当前位置: 首页 > 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.lryc.cn/news/597519.html

相关文章:

  • 基于Kafka实现简单的延时队列
  • 【JVM】从 JVM 整体说明 JVM 运行的完整流程
  • C#与WPF使用mvvm简单案例点击按钮触发弹窗
  • 基于阿里云平台的文章评价模型训练与应用全流程指南
  • nginx.conf配置文件以及指令详解
  • 人工智慧是引擎,人类是方向盘:Vitalik对AI未来的深刻反思
  • 关于SPring基础和Vue的学习
  • rust嵌入式开发零基础入门教程(六)
  • 什么是MySQL 视图
  • 综合实验(3)
  • 暑期自学嵌入式——Day06(C语言阶段)
  • 7月23日星期三今日早报简报微语报早读
  • 51c大模型~合集158
  • Vue 3 组件通信全解析:从 Props 到 Pinia 的深入实践
  • 用 llama.cpp 构建高性能本地 AI 应用:从环境搭建到多工具智能体开发全流程实战
  • Python应用指南:构建和获取全球地铁线路数据及可视化
  • ToBToC的定义与区别
  • 从 XSS 到 Bot 攻击:常见网络攻击防不胜防?雷池 WAF 用全场景防护为网站筑牢安全墙
  • Java中IO多路复用技术详解
  • S段和G段到底有什么区别
  • 基于springboot的乡村旅游在线服务系统/乡村旅游网站
  • 网络--VLAN技术
  • 在 Ubuntu 20.04.5 LTS 系统上安装 Docker CE 26.1.4 完整指南
  • OpenLayers 快速入门(五)Controls 对象
  • centos9 ssh能连接密码不对
  • 电脑32位系统能改64位系统吗
  • GoLand 项目从 0 到 1:第一天 —— 搭建项目基础架构与核心雏形
  • 抖音集团基于Flink的亿级RPS实时计算优化实践
  • 学生信息管理系统 - HTML实现增删改查
  • istio-proxy用哪个端口代理http流量的?