一、String類 1.String類是不可以變類,也就是說String對象聲明後 2.java.lang.String;是字元串類型 (1)字元串一旦創建不可再改變,“abc”字元串對象一旦創建,不可在改變成“abcd”。 (2)提升字元串的訪問效率:在程式中使用了“緩存”技術,所以在java中所 ...
一、String類
1.String類是不可以變類,也就是說String對象聲明後
2.java.lang.String;是字元串類型
(1)字元串一旦創建不可再改變,“abc”字元串對象一旦創建,不可在改變成“abcd”。
(2)提升字元串的訪問效率:在程式中使用了“緩存”技術,所以在java中所有使用“雙引號”括起來的字元串,都會在“字元串常量池“中創建一份,字元串常量池在方法區中存儲。
(3)在程式執行過程中,如果程式用到某個字元串,例如:”abc“,那麼程式會在字元串常量池中去搜索該字元串,如果沒有找到這個字元串則在字元串常量池中新建一個”abc“字元串,如果找到就直接拿過來用。(字元串常量池是一個緩存區,為了提高訪問字元串的效率)。
(4)使用Sting的時候,應該註意的問題:儘量不要做字元串頻繁的拼接操作,因為字元串一旦創建就不可以改變了,只要頻繁的拼接,就會在字元串常量池中創建大量的字元串對象,給垃圾回收帶來問題。
package com.bjpowernode.java_learning; public class D72_1_StringClassAnlysis { public static void main(String[] args) { //創建一個“abc”字元串對象,該對象的記憶體地址,讓s1變數保存。 //s1是一個引用,s1指向“abc”對象 String s ="abc"; //可以讓s1重新指向嗎?s1是局部變數,s1前面是沒有final,所以s1是可以重新指向的。 //但是"def"字元串本身是不可以變的。 String s1 = "雄安"; String s2 = "雄安"; System.out.println(s1==s2); System.out.println(s1.equals(s2)); //比較兩個字元串的值,不能用雙等號,要使用函數.equals,雙等號比較的是記憶體地址 //如果字元串是new出來的,那麼記憶體地址就肯定不相等了,這個了例子也證明瞭 //直接使用字元串的話,那麼就是存儲在了方法區的字元串常量池 String s3 = new String("雄安"); String s4 = new String("雄安"); System.out.println(s3==s4); System.out.println(s3.equals(s4)); System.out.println(s1==s3); System.out.println(s1.equals(s3)); //題解:以下程式創建了三個對象,兩個在堆記憶體,一個在方法區記憶體 String s5 = new String("abc"); String s6 = new String("abc"); String[] ins = {"sport","music","food","sleep"}; //要求將上面的興趣愛好拼接成一個字元串 String temp = null; for(int i=0;i<ins.length;i++) { if(i==ins.length-1) { temp += ins[i]; }else { temp += ins[i]+","; } } System.out.println(temp); //不推薦這樣做因為做了大量拼接,方法區創建了很多字元串 } }
二、字元串常用構造方法
package com.bjpowernode.java_learning; public class D72_2_StringCommonMethod { public static void main(String[] args) { //常用的構造方法 String s1 = "abc"; String s2 = new String("abc"); byte[] bytes = {97,98,99,100}; String s3 = new String(bytes); System.out.println(s3);//從輸出結果可以看出,String已經重寫了Object中的toString String s4 = new String(bytes,0,2);//第二個參數是開始位置,第三個參數是長度 System.out.println(s4); char[] c1 = {'我','是','中','國','人'}; String s5 = new String(c1); System.out.println(s5); String s6 = new String (c1,2,2); System.out.println(s6); } }
三、源碼:
D72_1_StringClassAnlysis.java
D72_2_StringCommonMethod.java
https://github.com/ruigege66/Java/blob/master/D72_1_StringClassAnlysis.java
https://github.com/ruigege66/Java/blob/master/D72_2_StringCommonMethod.java
2.CSDN:https://blog.csdn.net/weixin_44630050
3.博客園:https://www.cnblogs.com/ruigege0000/
4.歡迎關註微信公眾號:傅里葉變換,個人公眾號,僅用於學習交流,後臺回覆”禮包“,獲取大數據學習資料