1. 程式人生 > 其它 >Java String類的學習

Java String類的學習

技術標籤:Java字串java程式語言

String類物件例項化

  • 有直接賦值和構造方法例項化兩種
	public static void main(String args[]) {
		String str1="str1";
		System.out.println(str1);
		String str2=new String("str2");
		System.out.println(str2);
	}

字串的比較

  • Java中提供的==可以進行數值的比較,判斷基本資料型別。
  • String類物件如果使用==比較比較不是內容,而是字串的堆記憶體地址。
	public static void main(String args[]) {
		String str1="str";
		String str2=new String("str");
		String str3=str2;
		System.out.println(str1==str2);
		System.out.println(str2==str3);
		System.out.println(str1==str3);
	}
false
true
false
  • 字串內容相等判斷public boolean equals
	public static void main(String args[]) {
		String str1="str";
		String str2=new String("str");
		System.out.println(str1.equals(str2));
	}
true

字串常量

  • 在程式中常量是不可被改變內容的統稱,字串常量就是String類的匿名物件。
	public static void main(String args[]) {
		String str1="str";
		System.out.println("str".equals(str1));
	}

兩種例項化方式比較

  • 直接賦值的物件例項化,通過直接賦值的方式為String類物件例項化開闢一塊堆記憶體空間,而且對同一字串的直接賦值還可以實現對堆記憶體空間的重用,就是在內容相同的情況下不會開闢新的堆記憶體空間,而是直接指向已有的堆記憶體空間。
	public static void main(String args[]) {
		String str1="str";
		String str2="str";
		String str3="string";
		System.out.println(str1==str2);
		System.out.println(str1==str3);
	}
true
false

  • 構造方法例項化,每當使用關鍵字new就表示要開闢新的堆空間記憶體。
	public static void main(String args[]) {
		String str1="str";
		String str2="str";
		String str3=new String("str");
		System.out.println(str1==str2);
		System.out.println(str1==str3);
	}
true
false

  • 字串物件池,在JVM的底層存在一個物件池,物件池本質就是共享設計模式的一種應用,當代碼使用直接賦值的方式定義了一個String類物件時,會將此字串物件所使用的匿名物件入池儲存,當還有其他String類物件也採用了直接賦值的方式,並且設定了同樣的內容,那麼將不會開闢新的堆記憶體空間,而是使用已有的物件進行引用的分配。
  • 開闢的新記憶體資料可以public String intern()進行入池。
	public static void main(String args[]) {
		String str1="str";
		String str2="str";
		String str3=new String("str").intern();
		System.out.println(str1==str2);
		System.out.println(str1==str3);
	}
true
true

字串常量池

  • 靜態常量池:程式在載入時候會自動將此程式中儲存的字串、普通常量、類和方法等資訊,全部進行分配。
	public static void main(String args[]) {
		String str1="hi,Yang";
		String str2="hi,"+"Yang";
		System.out.println(str1==str2);
	}
true
  • 執行時常量池:當程式載入之後,有一些字串內容時通過String物件的形式儲存後在實現字串連線處理,String物件的內容可以改變。
	public static void main(String args[]) {
		String str="Yang";
		String str1="hi,Yang";
		String str2="hi,"+str;
		System.out.println(str1==str2);
	}
false

字串修改

  • String類對於資料的儲存時基於陣列實現的,陣列屬於定長的資料型別,這樣表明String物件的內容一旦宣告將不可直接改變,而所有的字串物件內容的修改都是通過引用變化來實現的。
	public static void main(String args[]) {
		String str="hi";
		str+=",";
		str=str+"Yang";
		System.out.println(str);
	}
hi,Yang

對於字串物件內容的修改,其實質是改變了引用關係,同時會產生垃圾空間,影響執行效率。

String類常用方法

  • 字串與字元
方法名稱型別描述
public String(char[] value)構造將傳入的全部字元陣列變為字串
public String(char[] value,int offset,int count)構造將部分字元陣列變為字串
public char charAt(int index)普通獲取指定索引位置的字元
public char[] toCharArray()普通將字串中的資料以字元陣列的形式返回
	public static void main(String args[]) {
		String str="hi,Yang";
		char c=str.charAt(3);
		System.out.println(c);
	}
Y
	public static void main(String args[]) {
		String str="hi,Yang";
		char[] c=str.toCharArray();
		System.out.println(c);
		System.out.println(new String(c,0,4));
	}
hi,Yang
hi,Y
  • 字串與位元組
方法名稱型別描述
public String(byte[] bytes)構造將全部位元組陣列變為字串
public String(byte[] bytes,int offset,int length)構造將部分位元組陣列變為字串
public byte[] getBytes()普通將字串轉為位元組陣列
public byte[] getBytes(String charsetName) throws UnsupportedEncodingException普通編碼轉換
  • 字串比較
方法名稱型別描述
public boolean equals(String anObject)普通區分大小寫的相等判斷
public boolean equalsIgnoreCase(String anotherString)普通不區分大小寫比較
public int compareTo(String anotherString)普通判斷兩個字串的大小
public int compareToIgnoreCase(String str)普通不區分大小寫進行字串大小的比較
  • 字串查詢
方法名稱型別描述
public public boolean contains(String s)普通判斷子字串是否存在
public int indexOf(String str)普通從頭查詢指定字串的位置
public int indexOf(String str,int fromIndex)普通從指定位置查詢指定字串的位置
public int lastIndexOf(String str)普通從後往前查詢指定字串的位置
public int lastIndexOf(String str ,int fromIndex)普通從指定位置從後往前查詢指定字串的位置
public boolean startsWith(String prefix)普通判斷是否以指定的字串開頭
public boolean startsWith(String perfix,int toffset)普通由指定位置判斷是否以指定的字串開頭
public boolean endsWith(String suffix)普通判斷是否以指定的字串結尾
  • 字串替換
方法名稱型別描述
public String replaceAll(String regex,String replacement)普通全部替換
public String replaceFirst(String regex,String replacement)普通替換首個
  • 字串拆分
方法名稱型別描述
public String[] split(String regex)普通按照指定的字串進行全部拆分
public String[] split(String regex,int limit)普通按照指定的字串進行部分拆分
  • 字串擷取
方法名稱型別描述
public String substring(int beginIndex)普通從指定索引擷取到結尾
public String substring(int beginIndex,int endIndex)普通擷取指定索引範圍中的子字串