Java學習筆記之Java的String類

2021-06-28 16:05:48 字數 1680 閱讀 2119

string s0 = "test";

string s1 = "test";

string s2 = "te" + "st";

system.out.println(s0 == s1);

system.out.println(s0 == s2);

執行結果:

true

true

用」=」操作符建立的字串放在string pool中。當用」=」操作符建立乙個字串時,jvm會在string pool中查詢是否有內容一樣的字串,有則直接返回它的引用,沒有就在string pool中建立乙個。如此就確保了在string pool中只有乙份內容相同的字串。所以s0和s1都是引用同乙個」test」常量,所以s0 == s1返回true。而且編譯器會把在編譯期能確定的常量都確定下來,」te」和」st」都是常量,所以他們拼接起來也還是常量,所以編譯期他們會拼接為」test」,且確保只有乙份」test」拷貝,所以s0、s1和s2都引用同乙個」test」。

string s0 = "test";

string s1 = new string("test");

string s2 = new string("test");

system.out.println(s0 == s1);

system.out.println(s1 == s2);

執行結果:

false

false

其中s0指向的是string pool中的」test」,而s1中,因為s1是用new手動建立的物件,要到執行期程式才會在堆中分配記憶體來儲存」test」,所以這兩個」test」儲存在不同的地方,所以s0 == s1返回false。雖然s1和s2的內容都是」test」,但是因為他們都是用new關鍵字建立的存放在堆區,jvm不會去查詢堆區是否有和他們內容一樣的字串。

s1.intern()被呼叫後,如果string pool中存在乙個字串s2,並且s1.equals(s2)(即它們的內容相同),則返回s2;如果string pool中不存在s2這種字串,則會增加乙個字串內容和s1相同的字串s2到string pool,並返回s2。

string s1 = new string("test");

string s2 = "test";

system.out.println( s2 == s1.intern() );

system.out.println( s1 == s1.intern() );

執行結果:

true

false

string的」+」操作符返回的是乙個新建立的(用new關鍵字)string型別物件。

string s1 ="hel";

string s2 = s1 + "lo";

string s3 = "hello";

system.out.println(s2 == s3);

執行結果:

false
因為s2是」+」操作符返回的乙個新的string物件,它儲存在堆區,而s3在string pool中,所以返回false;

Java學習筆記之JOptionPane

你喜歡看定影嗎?自定義詢問 intn joptionpane.showconfirmdialog this,你喜歡藍色嗎?詢問 joptionpane.yes no option intn joptionpane.showconfirmdialog this,你喜歡藍色嗎?詢問 joptionpan...

Java學習筆記之陣列

陣列 概念 同一種型別資料的集合,其實陣列就是乙個容器.陣列的好處 可以自動給陣列中的元素從0開始編號,方便操作這些元素.格式1 元素型別 陣列名 new 元素型別 元素個數 格式2 元素型別 陣列名 new 元素型別 記憶體的劃分 1 暫存器 2 本地方法區 3 方法區 4 棧記憶體 儲存的都是區...

java學習筆記之異常

基礎的就不多說了,說一下容易被忽略的知識點。a 不管有木有出現異常,finally塊中 都會執行 b 當try和catch中有return時,finally仍然會執行 c finally是在return後面的表示式運算後執行的 此時並沒有返回運算後的值,而是先把要返回的值儲存起來,管finally中...