String類的2種賦值分析

2021-06-27 21:57:54 字數 757 閱讀 8697

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...