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.pswp.cn/diannao/93000.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93000.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93000.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解鎖永久會員的白噪音軟件:睡眠助手

如今的年輕人壓力普遍較大,學會解壓至關重要。這期就為大家推薦一款優秀的白噪音軟件,在壓力大時聽聽,能起到不錯的解壓效果。 睡眠助手 文末獲取 這款軟件的特別版本十分出色,知曉的人不多。它已解鎖永久會員,無需登…

uniapp使用css實現進度條帶動畫過渡效果

一、效果 二、實現原理 1.uni.createAnimation 動畫函數 2.初始化uni.createAnimation方法 3.監聽值的變化調用動畫執行方法 三、代碼 1.實現方式比較簡單&#xff0c;目前是vue3的寫法&#xff0c;vue2只需要稍微改動即可 <template><view class"layout_progre…

高級分布式系統調試:調試的科學與 USE 方法實戰

高級分布式系統調試:調試的科學與 USE 方法實戰 前言:從“救火”到“探案” 當一個復雜的分布式系統出現“灰色故障”——例如“服務有時會變慢”、“偶爾出現超時錯誤”——我們該從何處著手?隨機地查看 Grafana 儀表盤,或者漫無目的地 tail -f 日志,往往效率低下,甚至…

棧算法之【有效括號】

目錄 LeetCode-20題 LeetCode-20題 給定一個只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判斷字符串是否有效。 有效字符串需滿足&#xff1a; 左括號必須用相同類型的右括號閉合。 左括號必須以正確的順序閉合。 每…

大模型——Data Agent:超越 BI 與 AI 的邊界

Data Agent:超越 BI 與 AI 的邊界 1. 數據工具的演進路徑 在數據分析領域,技術工具經歷了多個階段的演進。這些演進不僅反映了技術的進步,也體現了用戶需求和使用場景的變化。 Excel 時代:告別手工作業,陷入“表格泥潭“,早期數據分析依賴 Excel,實現基礎數據記錄、計…

數據空間技術在智慧水庫管理平臺中的賦能

數據空間技術在智慧水庫管理平臺中的賦能&#xff1a;設備到應用的數據傳輸優化 數據空間技術為智慧水庫管理平臺提供了革命性的數據傳輸、處理和安全保障能力。以下是數據空間技術在設備到應用數據傳輸過程中的全面賦能方案&#xff1a; 數據空間賦能架構設計 #mermaid-svg-R2…

SpringBoot學習路徑二--Spring Boot自動配置原理深度解析

SpringBoot最核心的功能就是自動裝配&#xff0c;Starter作為SpringBoot的核心功能之一&#xff0c;基于自動配置代碼提供了自動配置模塊及依賴的能力&#xff0c;讓軟件集成變得簡單、易用。使用SpringBoot時&#xff0c;我們只需引I人對應的Starter&#xff0c;SpringBoot啟動…

音視頻中一些常見的知識點

1. GCC是如何進行帶寬評估的 GCC(Google Congestion Control)是一種專為實時音視頻傳輸設計的擁塞控制算法,它主要通過發送端和接收端的協同工作來進行帶寬評估。具體過程如下: 接收端處理 計算延遲梯度:接收端通過統計數據包到達時間的變化,即RTT(往返時間)波動,來計…

STM32硬件I2C的注意事項

文章目錄軟件模擬I2C硬件的實現方式最近在研究I2C的屏幕使用。有兩種使用方式&#xff0c;軟件模擬I2C、硬件HAL使用I2C。軟件模擬I2C 發送數據是通過設置引腳的高低電平實現的。 /*引腳配置*/ #define OLED_W_SCL(x) GPIO_WriteBit(GPIOB, GPIO_Pin_6, (BitAction)(x)) #de…

Python捕獲異常

Python捕獲異常主要通過try-except語句實現&#xff0c;以下是核心語法和使用場景&#xff1a;一、基礎捕獲結構try: # 可能引發異常的代碼 result 10 / 0 except ZeroDivisionError: # 處理特定異常 print("除數不能為零") 二、捕獲多種異常try: # 可能引發…

Scala 和 Spark 大數據分析(六)

原文&#xff1a;annas-archive.org/md5/39eecc62e023387ee8c22ca10d1a221a 譯者&#xff1a;飛龍 協議&#xff1a;CC BY-NC-SA 4.0 第十三章&#xff1a;我的名字是貝葉斯&#xff0c;樸素貝葉斯 “預測是非常困難的&#xff0c;尤其是當它涉及未來時” -尼爾斯玻爾 機器學…

【kubernetes】-6污點與污點容忍

文章目錄污點與污點容忍1、 污點&#xff08;taint&#xff09;2、操作命令3、污點容忍4、污點擴展污點與污點容忍 1、 污點&#xff08;taint&#xff09; 污點是節點的屬性&#xff0c;用于排斥一類特定的 Pod。通過污點&#xff0c;可以避免 Pod 被調度到不合適的節點上 …

定義損失函數并以此訓練和評估模型

基礎神經網絡模型搭建 【Pytorch】數據集的加載和處理&#xff08;一&#xff09; 【Pytorch】數據集的加載和處理&#xff08;二&#xff09; 損失函數計算模型輸出和目標之間的距離。通過torch.nn 包可以定義一個負對數似然損失函數&#xff0c;負對數似然損失對于訓練具有多…

電子書轉PDF格式教程,實現epub轉PDF步驟

EPUB 格式屬于流式文檔&#xff0c;在屏幕尺寸各異的設備上都能自動適配顯示。然而&#xff0c;要是你使用的是特定的閱讀設備&#xff0c;像打印機、不支持 EPUB 格式的電子閱讀器&#xff08;例如某些早期的 Kindle 型號&#xff09;&#xff0c;或者需要在固定尺寸的屏幕上展…

Java學習第六十九部分——RabbitMQ

目錄 一、前言提要 二、基本信息 1. 關鍵定義 2. 核心角色 3. 交換機類型 三、消息生命周期與可靠性機制 四、生態集成——與Java 五、應用場景 六、性能與選型對比 七、生產級最佳實踐——基于Java 八、應用場景 九、一句話總結 一、前言提要 Spring AMQP是…

MDAC2.6問題解決指南:解決.NET Framework數據訪問煩惱

MDAC2.6問題解決指南&#xff1a;解決.NET Framework數據訪問煩惱 【下載地址】MDAC2.6問題解決指南 MDAC 2.6 問題解決指南為您提供了針對.NET Framework數據提供程序要求使用Microsoft Data Access Components (MDAC) 2.6或更高版本的全面解決方案。本指南詳細介紹了如何在開…

會話跟蹤模式

一、圖片講了什么&#xff1f;這張圖片主要講的是“會話跟蹤技術”&#xff0c;也就是網站怎么記住你是誰、你做了什么。1. 什么是會話&#xff1f;會話&#xff08;Session&#xff09;就像你和網站的一次聊天&#xff0c;從你打開網頁到關閉網頁&#xff0c;這段時間就是一次…

C語言開發工具Win-TC

如你所知&#xff0c;WIN-TC是一個turbo C2 WINDOWS 平臺開發工具&#xff0c;最大特點是支持中文界面&#xff0c;支持鼠標操作&#xff0c;程序段復制&#xff0c;為初學 c 語言、對高等編程環境不熟悉的同志們非常有幫助。該軟件使用 turbo C2 為內核&#xff0c;提供 WINDO…

lwIP學習記錄5——裸機lwIP工程學習后的總結

1、ping包的TTL生存時間如何修改當我們把工程燒錄到板子上是&#xff0c;我們對板子的IP進行ping包&#xff0c;看到信息如下圖這時候我好奇TTL是什么作用&#xff0c;為什么有的設備是64有的設備是128有的是255&#xff1f;解&#xff1a;TTL&#xff08;Time to Live&#xf…

利用Trae將原型圖轉換為可執行的html文件,感受AI編程的魅力

1、UI設計原型效果2、通過Tare對話生成的效果圖&#xff08;5分鐘左右&#xff09;3、查資料做的效果圖&#xff08;30分鐘左右&#xff09;&#xff09;通過以上對比&#xff0c;顯然差別不多能滿足要求&#xff0c;只需要在繼續優化就能搞定&#xff1b; 4、Trae生成的源碼&l…