為什麼用String 類申請字串物件時不能使用new

2025-02-05 00:35:17 字數 3213 閱讀 6272

1樓:十廾川

可以new啊,string a=new string("hello");不過和string a = hello";記憶體中有區別,string a = hello" 如果之前有string物件是hello的值的話那a直接就指向之前的那個物件了,不再重新new乙個物件了 string a = new string("hello");無論以前有沒有都重新new乙個新的。

2樓:匿名使用者

不是不能用,根據自己的用途來選擇怪上怎麼用。

c#中new為什麼不可以對string型別使用?

3樓:網友

string是string類的別名,引用型別,且該型別是隻讀的,不可修改,當你修改字串內容時,實際上是建立了另乙個新的字串並將引用指向了它,你可以參考string型別的建構函式說明,就明白錯在**了。第一條只是建立了乙個string型別的陣列,並未對其初始化,如果你對該陣列中的任一成員使用第二條的方法進行初始化,一樣會報錯。

string型別建構函式參考。

j**a string一旦宣告字串就不能改變

4樓:網友

都是在一塊兒新的記憶體裡生成乙個新的字串,原string 字串所申請的記憶體中資料無變化。

5樓:mirror呂洪磊

第乙個:是在新的記憶體塊寫入。

第二個:區別在於,第乙個呼叫的s的記憶體塊中的值,第二個呼叫的是新記憶體塊中的值。

6樓:贏了不笑

string a = "abc";和string a = new string("abc"); 是不能等價的。在建立的過程中,生成的物件數量不同。

j**a:為什麼new string("hello")會產生兩個物件?

7樓:網友

一共產生2個物件 堆區中1個,常量池中1乙個。

如果原式是string a=new string("hello");

string a="hello";首先會到常量池中去查詢,如果存在就不再分配,否則就不分配,常量池中的資料是在類編譯期賦值的,也就是載入class檔案時候就把它放到常量池裡了。

8樓:網友

如果字串池中沒有「hello」,jvm就會在字串池中建立乙個「hello」的物件,然後new string又會在堆中建立乙個物件,將"hello"拷貝到這個新建立的物件中。

在類載入的時候在堆記憶體中建立了乙個string型別的物件來與常量池中的字面量作了對映,這個字串叫做拘留物件,且每個字串字面量只對應乙個拘留物件,之後建立的都是根據這個物件為藍本,但之後建立的都不是拘留物件而是普通物件了。

c++中如何將乙個string類物件裡的字串完整賦值給乙個字元型的陣列?

9樓:網友

string s="dsafjsakfas";

int ilen=;//得到字串的長度。

char *s1=new char[ilen+1];

for(int i=0;i可以像字元陣列一樣直接訪問下標為i 的字元//知道這點你應該就知道怎樣做了。

si[i]='\0';

大致就這樣,自己寫的,沒有複製貼上。

連線字串的時候為什麼用stringbuffer而不用string

10樓:鐵猴

stringbuffer是可以改變的字串,而string是不可改變的。每次使用類中的方法之一時,都要在記憶體中建立乙個新的字串物件,就要為該物件分配新的空間。當要對字串重複修改時,建立新的string物件相關的系統開銷很大,就是要修改字串而不建立新的物件,則用stringbuffer。

為什麼j**a中gregoriancalendar類或是別的什麼類物件的建立需要new乙個物件,string類的建立不需要呢?

11樓:零嗣

string物件的建立並不是不需要new,對於此前不存在的字串,比如「abc」,你採用string str="abc" 和採用string str = new string("abc")的效果是基本上相同的,都是建立新物件(後者實際上建立了兩個物件)。但是你如果第二次申明string str="abc" 和string str = new string("abc"),那麼就更不同了。前者重用了物件池中的"abc"字串,而後者則重新生成了乙個新的"abc"字串。

一般建議不要採用new來生成字串物件,可以避免不必要的物件建立。

j**a中string問題,string a=new string(""); 和string a=new string();有區別嗎

12樓:網友

有第乙個佔了空間 即:「」佔了記憶體,電腦自動分配了空間給它;

第二個只是宣告瞭乙個a,但沒佔空間,系統沒分配。

13樓:汐日南莘

有區別string a=new string("")建立乙個空的字串,注意這裡的空不是指null 而是"",是佔記憶體的。

在堆記憶體建立了乙個物件,在stirng池中也建立了乙個物件string a=new string();

建立乙個空的字串,其值為null,不佔記憶體。

14樓:網友

有new的就在堆區佔用了記憶體,也就是說有物件,直接用引號引起來的字串好像是在方法區有乙個物件。

15樓:網友

基本上沒有區別,前者會在string常量池中生成乙個「」(空字串),後者不會,他們都被例項化了,都會佔乙個string型別的儲存空間,要說區別就是前者多佔了點儲存空間,注:開發中都不會用到這兩種寫法,一般都是 :string a = 「」

16樓:中國人民很行了

a="aaaaa";在string池中建立了乙個物件。

string a=new string("aaaaa");總共建立了兩個物件;在堆記憶體建立了乙個物件,在stirng池中也建立了乙個物件。

17樓:網友

有區別;

string a=new string("")是new了乙個物件。

18樓:天道sjm酬勤

乙個建立例項,乙個沒有。

字串為什麼用16進製表示可以用其它進製表示嗎

字串不分幾進位制,只是用來表述一串字元而已。例如 string s admin 你看到的十六進位制可能是表述顏色 例如 string red fffff 等因為十六進位制除了0 9以外還有a f,所以如果一個引數想用十六進位制表示,必須採取string字串型別。但是不是代表字串一定要用十六進位制。什...

C語言中字元常量有什麼用,C語言中字元常量與字串常量有什麼區別?

字元常量 在c語言中一個字元常量代表ascii字符集中的一個字元,在程式中用單引號把一個字元括起來作為字元常量。大小寫字母代表不同的字常量 單引號中的空格也是 字元常量只能包含一個字元 字元常量只能用但括號括起來。比如是常用字元的acii a 97 a 65 常量一般指隨時拿過來就可以用的,並且是不...

c語言中為什麼用巨集定義字元常量(字母)可以賦值給字元

因為巨集是一個簡單替換,所以c語言中用巨集定義一個字元常量 一個字母 可以內賦值給字元變數。實質容是在編譯之前會把巨集替換掉,然後再編譯。例如 define a 5 void main 在編譯之前a已經被替換成5了,所以就可以賦值給num。漢字根據編碼方式不同,所佔的大小2 4個位元組 不等,漢字賦...