第六章:常用類
阿新 • • 發佈:2020-12-21
一、java.lang.String類
1.1、String類的概述
1.1.1、圖示
1.1.2、說明
String:字串,使用一對""引起來表示。
① String宣告為final的,不可被繼承;
② String實現了Serializable介面:表示字串是支援序列化的。
③ 實現了Comparable介面:表示String可以比較大小
④ String內部定義了final char[] value用於儲存字串資料
⑤ 通過字面量的方式(區別於new給一個字串賦值,此時的字串值宣告在字串常量池中)。
⑥ 字串常量池中是不會儲存相同內容(使用String類的equals()比較,返回true)的字串的。
1.2、String的不可變性
1.2.1、說明
① 當對字串重新賦值時,需要重寫指定記憶體區域賦值,不能使用原有的value進行賦值。
② 當對現有的字串進行連線操作時,也需要重新指定記憶體區域賦值,不能使用原有的value進行賦值。
③ 當呼叫String的replace()方法修改指定字元或字串時,也需要重新指定記憶體區域賦值,不能使用原有的value進行賦值。
1.2.2、示例
package com.zixue.java; import org.junit.Test; /** * @author Mr Guo * @create 2020-12-21 15:01 */public class StringTest { @Test public void test1(){ String s1 = "abc";//字面量的定義方式 String s2 = "abc"; s1 = "hello"; System.out.println(s1 == s2);//比較s1和s2的地址值 System.out.println(s1);//hello System.out.println(s2);//abc System.out.println("*****************"); String s3= "abc"; s3 += "def"; System.out.println(s3);//abcdef System.out.println(s2);//abc System.out.println("*****************"); String s4 = "abc"; String s5 = s4.replace('a', 'm'); System.out.println(s4);//abc System.out.println(s5);//mbc } }
1.2.3、圖示
1.3、String類的例項化
1.3.1、兩種方式
方式一:通過字面量定義的方式
方式二:通過new + 構造器的方式
1.3.2、程式碼示例
Person.java:
package com.zixue.java; /** * @author Mr Guo * @create 2020-12-21 15:15 */ public class Person { String name; int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } }
StringTest.java:
package com.zixue.java; import org.junit.Test; /** * @author Mr Guo * @create 2020-12-21 15:01 */ public class StringTest { @Test public void test1(){ //通過字面量定義的方式:此時的s1和s2的資料javaEE宣告在方法區中的字串常量池中。 String s1 = "javaEE"; String s2 = "javaEE"; //通過new + 構造器的方式:此時的s3和s4儲存的地址值,是資料在堆空間中開闢空間以後對應的地址值。 String s3 = new String("javaEE"); String s4 = new String("javaEE"); System.out.println(s1 == s2);//true System.out.println(s1 == s3);//false System.out.println(s1 == s4);//false System.out.println(s3 == s4);//false System.out.println("***********************"); Person p1 = new Person("Tom",12); Person p2 = new Person("Tom",12); System.out.println(p1.name.equals(p2.name));//true System.out.println(p1.name == p2.name);//true p1.name = "Jerry"; System.out.println(p2.name);//Tom } }
效果:
1.3.3、圖示
1.3.4、面試題
String s = new String("abc");方式建立物件,在記憶體中建立了幾個物件?
兩個:一個是堆空間中new結構,另一個是char[]對應的常量池中的資料:"abc"