字串新建和直接賦值的區別

2021-09-25 22:54:27 字數 1544 閱讀 8233

string s = new string(「hello」)

string s = 「hello」;

string s = new string(「hello」)會建立2(1)個物件,

string s = 「hello」建立1(0)個物件。

注:當字串常量池中有物件hello時括號內成立!

對於string類 == 用於比較兩個string物件的位址,

棧中定義乙個物件s1,去堆中開闢乙個記憶體空間,將記憶體空間的引用賦值給s1,hello」是常量,然後去字串常量池 檢視是否有hello字串物件,沒有的話分配乙個空間存放hello,並且將其空間位址存入堆中new出來的空間中;

在棧中定義乙個物件s2,然後去字串常量池中檢視是否有」hello」字串物件,有,直接把」hello」的位址賦值給s2;

s1中存的是堆中分配的空間,堆中分配的空間中存的是字串常量池中分配空間存放」hello」的空間的位址值。而s2中之間存的是字串常量池中分配空間存放」hello」的空間的位址值。

由於s1與s2中存放的位址不同,所以輸出false。string重寫了equals()方法,它比較的是引用型別的的值是否相等

public

class

stringdemo1

}

s5、s6都是在常量池中取值,二者都指向常量池中同一物件,其位址值相同,所以結果為true。

public

class

stringdemo4

}

s1與s2相加是先在字串常量池中開乙個空間,然後拼接,這個空間的位址就是s1與s2拼接後的位址。與s3的位址不同,

s3與」hello」+」world」作比較,」hello」+」world」先拼接成」helloworld」,然後再去字串常量池中找是否有」helloworld」,有,所以和s3共用乙個字串物件,

string s = new string(「hello」)會建立2(1)個物件,string s = 「hello」建立1(0)個物件。

注:當字串常量池中有物件hello時括號內成立!字串如果是變數相加,先開空間,在拼接。

字串如果是常量相加,是先加,然後在常量池找,如果有就直接返回,否則,就建立。

字串的賦值

字串表示方法 char str 20 char ch 賦值操作 1 定義的時候賦值 char str 20 what pity char ch how are you 2 用字串複製函式 strcpy str,what pity 但是對於用指標表示的字串變數用複製函式賦值會出現問題,需要先申請記憶體...

字串字元陣列的賦值

字元陣列的定義與初始化 char str 10 如果說提供的字元的個數大於陣列的長度,就按語法錯誤處理,如果小於陣列的長度,不夠的位置用空字元補全 0 字元陣列與字串 1 c 語言中將字串當做字元陣列來處理 字串的結束標誌是 0 而前面的所有字元組成字串,不算 0 2 對於字串常量的話,系統會自動在...

關於字串的賦值和strcpy 的區別

使用常量字串初始化char指標,或者使用strcpy複製,從語法上我覺得都是可以的。但是,在這個例子中選擇了後者,我覺得是有其他考慮的。因為,ctermid name是全域性的,可能用來傳送資料,將str指向這個位址,可能會和其他的函式同步乙個記憶體變數 而使用常量初始化 str dev tty 那...