字串物件都來自於字串池嗎?

2021-09-06 01:34:22 字數 1009 閱讀 7004

我們都知道

string s1 = "abc";

string s2 = "abc";

string s3 = new string("abc");

s1==s2!=s3

但是好多人都不知道(s1+s2)!="abcabc"

看一看下面奇特的**

view plaincopy to clipboardprint?

public class test  

public static void main(string args)   

}  public class test

public static void main(string args)

大家可以自行執行一下,看看結果再自己想一想,再看下面的分析,如果覺得不對,請指正

字串物件可以存放在兩個地方,字串池(pool)和堆

編譯期確定如何給乙個引用變數賦值

1)string s="abc";這種形式決定將從pool中尋找內容相同的字串並返回位址給s,pool中沒有就會在pool中新建並返回位址給s

2)string s = new string("abc");這種形式決定執行期將在堆上新建字串物件並返回給s,但這個物件不會加入到pool中

3)string s=s1+s2;s1和s2都是變數,這種形式決定將在堆上建立s1和s2(即便s1和s2指向的物件在池中已經存在,也會將值拷貝到物件建立新物件),然後建立s1+s2並賦給s

4)string s = "ab"+"cd";同1),都是來自於池

5)string s = "ab"+s1;類似3)

6)string s = s1+s2;s1和s2是常量,常量只能賦值一次,s1,s2如果在宣告的地方就賦值,那麼這個值在編譯期就是確定的,後面無法更改,s1+s2在執行前可確定s1/s2已經在池中存在,當然在池中進行,所以s指向pool;但是若s1,s2如果是例項常量在構造器中賦值,或是類常量在靜態塊中賦值,s1+s2無法確定二者皆來自於池,於是在堆上進行

所以會有以上的結果

字串物件python int 字串 字串物件

最近研究字串物件,稍微總結一下,以後繼續補充 如果我們須要把python的字串物件轉換為數整物件,我們須要用到int方法。比如 ainfo 222 print int ainfo 輸出的結果是222。然後我們檢視下ainfo在現的型別,通過type方法檢視下,發現是 而如果ainfo fefew22...

字串留用與字串池

1 關於字串操作對應用程式效能的影響 字串相等性檢查是應用程式常見的操作,於此同時,這也是一種嚴重損害效能的操作.執行序號 字串的二進位制 相等行檢查時,clr會進行以下操作 1 判斷字串的長度是否相等,不相等,比較結果直接返回false,如果相等,繼續下一步操作 2 比較字串的長度相等,clr會比...

ORACLE in 字串,字串,字串

因為傳進來的引數是 字串,字串,字串,要實現in 字串,字串,字串 select from htl price p where p.hotel id 30073328 and p.able sale date between to date 2009 03 27 yyyy mm dd and to ...