對於String的理解

2021-10-04 01:50:24 字數 948 閱讀 5248

1、string型別存放位置

string型別資料,在是string str1 = "abc"這種情形時,"abc"字串存放在常量池,而如果是string str2 = new string(「abc」)時,此時的str2對應的是乙個位於堆中的char型陣列的首位址。

2、 string的賦值問題

string字串相較於其他型別資料的賦值存在不同,如果是用其他型別賦值,則新賦的值會覆蓋舊值,存放在舊址原來存放的地方,而用string字串賦值時,則在賦值時,舊值並不非被覆蓋,新值會存放在乙個新的位址值中。

根本原因在於:

(1)string字串是由final的char型陣列修飾,不能被修改

(2)string字串的"「形式,其內容本身在常量池中滿足唯一性,同時其在建立伊始便有了屬於自己內容對應的位址值,所以,在賦值時,同時改變了原有變數的位址指向,故對原始位址值上內容無影響。

補充:在做賦值測試時,發現在賦予null時,其他型別也不改變原有位址存放的資料內容,所以可以推斷,null不僅不存有內容也不存有位址值,這一點有別於」",後者不存有內容,但其存在位址值。

3、string的常見判斷

(1)string str1 = 「abc」 string str2 = 「a」 + 「b」 + 「c」 判斷str1 == str2?

true,因為在編譯時,字串之間的拼接會直接完成,即在編譯時str2 = 「abc」,故兩者完全相同。

(2)string str1 = 「abc」 string str2 = 「a」 string str3 = 「bc」 + str2 判斷str1 == str3?

false,此時由於str2為變數,在編譯時不能直接識別,後採用呼叫stringbuilder方法拼接,憑藉完成後再用tostring方法返回string型別,而重寫後的tostring是通過new string(value,0,count)的方式生成字串,所以最終得到的str3位於堆中。

對於STL的理解

stl standard template library stl是一些 容器 的集合,這些 容器 有list,vector,set,map等,stl也是演算法和其他一些元件的集合。這裡的 容器 和演算法的集合指的是世界上很多聰明人很多年的傑作。stl的目的是標準化元件,這樣就不用重新開發,可以使用...

對於ftok的理解

回顧了一下以前的實驗,一直不理解為什麼在訊息佇列中要使用ftok,比如下面的乙個例項 if key ftok a 1 qid msgget key,ipc creat 0666 建立乙個訊息佇列 if qid 0 printf created queue id d n qid 輸出訊息佇列的id 要...

對於Zookeeper的理解

zookeeper是google 的chubby乙個開源的實現,是hadoop 的分布式協調服務。它包含乙個簡單的原語集,分布式應用程式可以基於它實現同步服務,配置維護和命名服務等。zookeeper包括乙個leader和多個follower。為什麼使用zookeeper?大部分分布式應用需要乙個主...