String型別在記憶體中的建立與儲存

2021-08-22 13:30:26 字數 712 閱讀 9479

在jdk1.8版本中,字串常量池已經從方法區中的執行時常量池中移到了堆中,所以在此討論的將是在堆記憶體中字串物件的建立過程。

直接通過字面量方式建立:

string str="abc";

通過new乙個物件的方式:

string str2=new string("abc");

首先,不管何種新建方式,都會呼叫string的intern()方法,該方法會先去判斷有沒有物件,有就返回,沒有就新建物件,然後返回。

當通過字面量建立時,先從字串常量池中查詢是否存在相等的字串物件,如果有,則直接返回,如果沒有則在字串常量池中建立乙個新的字串物件,然後返回。(也就是說:常量池中有,則不建立,沒有只在常量池中建立乙個物件)

當通過new乙個string物件的方式建立時,無論字符串常量池中存在與否,都會在堆記憶體中建立物件,此刻如果字串常量池已經存在,則只在堆記憶體中建立乙個記憶體,如果字串常量池中沒有該字串物件,則分別在常量池和堆中建立。(也就是說:常量池中有,則建立乙個物件,沒有,則建立兩個物件)

關於String在記憶體中的存放

string s1 abc 這個字串s1被賦予了值 abc 首先,查詢stringpool中有沒有 abc 這個值,如果不存在,那麼就將其存進去,如果已經存在,那麼就會被s1所呼叫。string s1 abc string s2 abc s1和s2所指向的物件是同乙個,以下 能夠看出來 system...

型別在記憶體中的儲存

在32位平台中 char 1個位元組也就是8個位元位 short 2個位元組 int 4個位元組 long 4個位元組 long long 8個位元組 float 4個位元組 double 8個位元組 型別的歸類 資料型別 char,shrot,int,long,long long都為整型 char...

float 型別在記憶體中的結構

float 在32位機上是 4個位元組的。它的結構是這樣子的 1位符號位 8 位指數字 23尾數字 其中指數是指以2 為底的指數,因為指數可能為負數,比如十進位制小數0.025,就是二進位制小數0.001 0 1 2 0 1 4 1 1 8 相當於1 2 的 3次方。所以規定指數字要加上127.eg...