1、字串常量池
2、string name = new string("你好");
3、string name = "你好";
分析物件在記憶體中的結構:
常量池--用來儲存字串
你好--是常量;name--是變數
每當new乙個物件時,在堆中會生成乙個物件,棧中的指標指向堆中。你好是堆記憶體中儲存的值,會將「你好」這個字串到字串常量池中去檢查,看「字串常量池」中是否有「你好」這個常量--若沒有,就會將「你好」這個字串存至「字串常量池」中。
string s1 = new string("你好");
string s2 = "你好"; //最多建立乙個字串物件,有可能不用建立物件
綜上,s1在new字串時,首先在堆中建立物件--「你好」,接著,會將「你好」拿到字串常量池中再存一遍。(字串常量池是在堆記憶體中的)
面試常問:
string s1 = new string("你好");
建立幾個物件?
回答是:2個 -- 1
個是在堆記憶體中;另乙個是在常量池中。
1、在堆中建立的new 2、將「你好」存在字串常量池中--為了下一次用相同值時,會從常量池中找。
2、簡寫方式有個好處--會直接讓s2到常量池中找,看是否有相同的值,有,直接指向;沒有,會在常量池中建立乙個「你好」,再讓s2指向「你好」。
String類賦值的理解
string str 123 str abc 怎麼理解以上 先看下下這個例子 int a 5 a 4 這段 的意思是,申請乙個記憶體單元,命名為a,同時把5存到記憶體單元,然後又把4存到記憶體單元內,也就是說現在名為a 的記憶體單元的內容在被重新賦值後修改了 string str 123 str a...
String賦值的方式比較
string的賦值原則 1 new方式賦值的話,首先到pool中查詢是否有相應的值,假如沒有,在pool中建立這個物件 有的話,就到堆中例項化該物件,然後返回物件記憶體位址。2 字面值方式賦值的話,直接在pool中查詢,假如有的話,返回該物件 沒有的話,在pool中建立這個物件。例項1 結果 fal...
string類的六種建構函式
stringctortest.cpp 定義控制台應用程式的入口點。測試string類的六個構造方法 include stdafx.h include include using namespace std int tmain int argc,tchar argv string one my fir...