補充:Java中String常用方法

變量的儲存

  • 寄存器: 由編譯器根據需求進行分配。
  • 棧:存放基本類型的變量數據和對象的引用,但對象本身不存放在棧中,而是存放在堆(new 出來的對象)或者常量池中(字符串常量對象存放在常量池中。)
  • 堆:用來存放所有new出來的對象。
  • 常量池:存放字符串常量和基本類型常量

首先創建一個Test類,可以看見代碼String name1 = "Jim";和代碼String name11 = "Jim";這種String方式直接複製的方法,其中的Jim是直接存放在常量池中的,因爲代碼String name1 = "Jim";已經在常量池中生成了一個Jim,在當代碼String name11= "Jim";運行時,會直接從常量池中去尋找是否含有一個Jim的值,如果有則直接將該值賦給變量name11,不會去生成一個新的Jim。如果沒有,則創建新的空間並將空間地址賦值給變量。

此時代碼System.out.println(name1==name11);因爲name1和name11是存儲的是變量的地址,所以此代碼是比較地址是否是一樣的,運行結果爲true。

而另一種構造方法式賦值,是在儲存在堆中的,每創建一個對象都會在堆中創建一個新的空間並將其他地址賦值給變量,所以代碼String name2 = new String("Lucy");和代碼String name22 = new String("Lucy");中的name2和name22雖然變量值相等,但是儲存的地址是不一樣的,所以代碼System.out.println(name2==name22);執行結果是false。


public class Test {

	public static void main(String[] args) {
		
		String name1 = "Jim";
		
		String name11 = "Jim";//直接賦值:先從常量池中查找是否含有該字符串:沒有,則創建新的空間並將空間地址賦值給變量;否則,則直接將已有字符串賦給變量
		System.out.println(name1==name11);//在引用類型中 == 用於比較地址是否一樣
		
		String name2 = new String("Lucy");//構造方法式:每創建一個對象都會在堆中創建一個新的空間並將其他地址賦值給變量
		String name22 = new String("Lucy");
		System.out.println(name2==name22);
		
		//String類常用方法
		String str = "ABcBA";
		System.out.println(str.charAt(2));//獲取某個位置(從0開始)的字符
		char [] letters = str.toCharArray();//將字符串中的每個字符解析出來組成一個字符類型的數組
		for(char letter : letters) {
			System.out.println(letter);
		}
		
		System.out.println(str.indexOf("A"));//用於返回指定字符在原字符串中的位置(從0開始),如果沒有,則返回-1;從左往右查
		System.out.println(str.lastIndexOf("A"));//從右往左查
		System.out.println(str.indexOf("Bc"));//多個字符時將其看作一個整體
		
		System.out.println(str.substring(1));//字符串取整
		System.out.println(str.substring(1,3));
	}
	
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章