String的底層儲存位置和形式

2021-10-19 14:26:23 字數 914 閱讀 7205

string在底層是以char型別陣列或byte型別陣列儲存

string字串兩種方式

string s1 = 「abc」; //字面量 先去常量池中檢視 沒有就在常量池中生成 有就不生成;

當字面量和常量等拼接或做運算 在編譯時進行

max = 100 // max是變數 100是字面量 表示相同但變數見名知意

string s2 = new string(「abc」) //物件在堆中開闢空間 但若常量池中沒有 也會在常量池中生成乙個

string s1 = 「123」;

string s2 = 「abc」;

string s3 = 「123abc」;

string s4 = s1 + s2;

string s5 = s1 + 「abc」;

string s6 = 「123」 + 「abc」;

s3 == s4 //false

s3 == s5 //false

s3 == s6 //true

解釋 : 首先要明白 當字面量和常量等拼接或做運算 在編譯時進行 所以 s6 在 編譯時 就能得到值 而變數 如 s1+ s2 編譯時無法獲取到值 執行會在堆中開闢空間 然後去取變數s1 s2的值

s4 開闢新空間存放

s5 常量池和堆中字串拼接 做+ 動態呼叫 開闢新空間存放

s6 在編譯時就拼接 執行時去常量池找 所以和s3是同乙個位址

補充:string str = new string(「abc」)建立例項的過程 1 首先在堆中(不是常量池)建立乙個指定的物件"abc",並讓str引用指向該物件 2 在字串常量池中檢視,是否存在內容為"abc"字串物件 3 若存在,則將new出來的字串物件與字串常量池中的物件聯絡起來 4 若不存在,則在字串常量池中建立乙個內容為"abc"的字串物件,並將堆中的物件與之聯絡起來

java中String的儲存位置

public class test string在對在編譯時可以確定的常量會做一定的優化,把其放在字串常量池中。ab1 ab2為true 和 new出來的物件都是儲存在堆內 物件引用都是儲存在棧內 string a a 這條語句在執行的時候,會在常量池內建立乙個string物件,內容為a,a指向這個...

hive的日誌分類和儲存位置

日誌記錄了程式執行的過程,是一種查詢問題的利器。hive中的日誌分為兩種 1.系統日誌,記錄了hive的運 況,錯誤狀況。2.job 日誌,記錄了hive 中job的執行的歷史過程。系統日誌儲存在什麼地方呢 在hive conf hive log4j.properties 檔案中記錄了hive日誌的...

HashMap底層(1 7和1 8)的儲存原理

首先說一下jdk1.7版本的存放原理 當例項化後,底層會直接建立乙個長度為16的一維陣列entry table 然後,說一下新增元素時,呼叫put方法 三種情況儲存 方式一 底層根據key計算hash值,計算出索引位置,檢視當前位置是否有值,如果沒有值,直接存放。情況二 當計算出的索引位置,有值時 ...