為什麼string是引用型別

2021-09-29 20:10:01 字數 735 閱讀 1509

在c#中分為值型別和引用型別,值型別為int ,float ,bool ,char ,struct等簡單資料型別,引用型別有stirng,class。

然而string的身為引用型別卻表現得與值型別十分相同。為什麼string為引用型別呢?首先明白string指向常量空間的位址。

如果我們有乙個字串 string a="abcde";

我們用a給其他字串賦值:string b=a,c=a,d=a;

那麼這樣子我們就得到了4個一模一樣的字串"abcde"。a  b  c  d都是指向同一塊位址。

可是既然string是引用型別,那麼a ,b ,c ,d 代表的都是同乙個字串,如果我改變其中乙個字串a="1234",另外的三個由於指向的都是同乙個字串,其他三個也應該是"1234"。但是事實上並不是這樣子的,另外三個的值依舊是」abcde「。這樣子的話string還能叫做引用型別嗎?

答案是string當然是個引用型別。

由於其他三個字串我們使用 a 去賦值,在a ,b , c , d ,指向的都是同一塊常量位址。但是常量是不能直接被改變的,因此我們不能通過直接修改字串常量來達到我們修改字串的目的,必須是開闢另乙個常量空間存放新的字元常量,因此,當使用 a="1234"時,a指向的位址該變了,但是b,c,d還是指向原來的同一塊空間。這種情況產生的現象使得string和值型別更改值時產生的現象一模一樣(如:int k=10;int t=k;t=20;)

引用是一種別名,本質上是指向同一塊位址,底層實現是通過指標。

C 反推為什麼string是引用型別

為什麼string是引用型別?c 裡面眾所周知,有兩大型別,分別引用型別和值型別。引用型別有類 class 和字串 string 而值型別有int double char bool等等。分析string為什麼是引用型別之前,要分析一下,int整型和bool布林值為什麼是值型別。int和bool這倆型...

String為什麼是final

1.可以快取 hash 值 因為 string 的 hash 值經常被使用,例如 string 用做 hashmap 的 key。不可變的特性可以使得 hash 值也不可變,因此只需要進行一次計算。2.string pool 的需要 如果乙個 string 物件已經被建立過了,那麼就會從 strin...

為什麼引用型別string的行為卻是值型別

首先,我們需要知道string的如下特性 1.字串做引數,傳遞的是引用,只是乙個指標的複製,你修改引數的指向,影響不到呼叫它的函式中的那個指標所指向的內容 2.字串不可修改。你以任何一種形式修改了字串 等操作 源字串其實還在的,只是根據你的修改重新生成了乙個新的字串 3.如果需要修改,兩種方案,一是...