有關String的那點事

2022-06-22 06:57:12 字數 2326 閱讀 8698

(1)string str1 = "abc";

system.out.println(str1 == "abc");

步驟:

1) 棧中開闢一塊空間存放引用str1;

2) string池中開闢一塊空間,存放string常量"abc";

3) 引用str1指向池中string常量"abc";

4) str1所指代的位址即常量"abc"所在位址,輸出為true;

(2)string str2 = new string("abc");

system.out.println(str2 == "abc");

步驟:

1) 棧中開闢一塊空間存放引用str2,

2) 堆中開闢一塊空間存放乙個新建的string物件"abc",

3) 引用str2指向堆中的新建的string物件"abc",

4) str2所指代的物件位址為堆中位址,而常量"abc"位址在池中,輸出為false

(3)string str3 = new string("abc");

system.out.println(str3 == str2);

步驟:

1) 棧中開闢一塊空間存放引用str3;

2) 堆中開闢一塊新空間存放另外乙個(不同於str2所指)新建的string物件;

3) 引用str3指向另外新建的那個string物件;

4) str3和str2指向堆中不同的string物件,位址也不相同,輸出為false;

(4)string str4 = "a" + "b";

system.out.println(str4 == "ab");

步驟:

1) 棧中開闢一塊空間存放引用str4;

2) 根據編譯器合併已知量的優化功能,池中開闢一塊空間,存放合併後的string常量"ab";

3) 引用str4指向池中常量"ab";

4) str4所指即池中常量"ab",輸出為true;

(5)final string s = "a";   //final修飾的string字串會自動存放在常量池中,s變數在棧中建立

string str5 = s + "b";

system.out.println(str5 == "ab");

步驟:

同4 true

注釋:如果去掉final 返回false,如6解釋

(6)string s1 = "a";

string s2 = "b";

string str6 = s1 + s2;   //變數相加底層會自動 new stringbuilder() 建立新的物件,棧中str6變數指向著堆中該物件的位址;

system.out.println(str6 == "ab");

步驟:

1) 棧中開闢一塊中間存放引用s1,s1指向池中string常量"a";

2) 棧中開闢一塊中間存放引用s2,s2指向池中string常量"b";

3) 棧中開闢一塊中間存放引用str6;

4) s1 + s2 通過stringbuilder的最後一步tostring()方法還原乙個新的string物件"ab",因此堆中開闢一塊空間存放此物件;

5) 引用str6指向堆中(s1 + s2)所還原的新string物件;

6) str6指向的物件在堆中,而常量"ab"在池中,輸出為false;

(7)string str7 = "abc".substring(0, 2);

步驟:

1) 棧中開闢一塊空間存放引用str7;

2) substring()方法還原乙個新的string物件"ab"(不同於str6所指),堆中開闢一塊空間存放此物件;

3) 引用str7指向堆中的新string物件;

(8)string str8 = "abc".touppercase();

步驟:

1) 棧中開闢一塊空間存放引用str6;

2) touppercase()方法還原乙個新的string物件"abc",池中並未開闢新的空間存放string常量"abc";

3) 引用str8指向堆中的新string物件;

綜上所述:string 是不可變的物件, 因此在每次對 string 型別進行改變的時候其實都等同於生成了乙個新的 string 物件,然後將指標指向新的 string 物件,所以經常改變內容的字串最好不要用 string ,因為每次生成物件都會對系統效能產生影響,特別當記憶體中無引用物件多了以後, jvm 的 gc 就會開始工作,那速度是一定會相當慢的;

一般情況下遇到字串多次修改的情況下,盡可能的使用stringbuilder() 或者 stringbuffer()進行處理;

有關css居中 那點事

前言 怎麼說呢?我以前只知道margin 0 auto 從來沒想過會這麼高深,自從學習了慕課網,我才明白了原來css居中是有很多學問的。首先來說一下分類。分類指的是對什麼樣的元素來進行居中,不同的元素對應不同的方法。1.行內元素 2.定寬的 塊狀元素 定寬的,也就是加了width 100px 這種。...

有關多型的那點事丶

前奏 虛函式表 虛函式表是通過一塊連續記憶體來儲存虛函式的位址.這張表解決了繼承 虛函式 重寫 的問題 在有虛函式的物件例項中都存在一張虛 函式表,虛函式表就像一張地圖指 明了實際應該呼叫的虛函式函式 1.什麼是多型 所謂多型性就是不同物件收到相同的訊息時,產生不同的動作。直觀來說,多型性是指用乙個...

有關彈性盒子的那點事

彈性盒子 要點一 彈性盒子其實是由兩部分組成 彈性容器 flex container 和彈性子元素 flex item 彈性容器 通過設定display屬性的值為flex或inline flex將其定義為彈性容器。彈性子元素 彈性容器內包含了乙個或多個彈性子元素。要點二 彈性盒子的作用範圍 彈性盒子...