a) 在java中使用的是unicode碼;字符串的內存空間大小跟它的屬性有關,String創建初始化時在JVM中數據流動,
b) 聲明創建初始化
i. 格式:String 變量名 = 初始值;
ii. String 變量名 = new String(初始值);
c) 操作:
i. 比較(equals與==)
1. equals比的是內容,==比的是地址,equalsIgnoreCase()—忽略大小寫
2. 例1:String d = “123”;
String d1 = new String(“123”);
System.out.println(d.equals(d1)); //true
System.out.println(d==d1);//false
ii. charAt(int index)——返回指定索引處的char值
iii. length()——–返回字符串的長度
iv. 轉換
1. toString()——返回本身
2. toLowerCase()—將所有字符串轉換為小寫
3. toUpperCase()—將所有字符串轉換為大寫
v. 查找
1. indexOf(String key)——從前查找返回的第一個key的索引
2. indexOf(String key,int formindex)—-返回從指定位置開始查找到的第一個key的索引
3. lastIndexOf()———從后查找返回最后一個key的索引
vi. 截取
1. substring(int bindex,int eindex)—-截取源字符串(begin,end)并返回一個新String
vii. 拆分
1. split(String regex)—–根據regex將源字符串進行分割成若干個新字符串
viii. 替換
1. replace(char oldchar,char newchar);
ix. 連接
1. + 或concat連接—在源字符串尾部連接新字符串,返回新字符串
2. “a“+”b”;
x. 創建對象
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”;
String str5 = s + “b”;
System.out.println(str5 == “ab”);
步驟:
同4
6. String s1 = “a”;
String s2 = “b”;
String str6 = s1 + s2;
System.out.println(str6 == “ab”);
步驟:
1) 棧中開辟一塊中間存放引用s1,s1指向池中String常量”a”,
2) 棧中開辟一塊中間存放引用s2,s2指向池中String常量”b”,
3) 棧中開辟一塊中間存放引用str5,
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對象