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個位元組 不等,漢字賦...