Java字串建立方式比較

碼齡為零的程式設計師發表於2020-12-12
public class Demo1 {
	public static void main(String[] args){
		String str1 = "hello";
		String str2 = "hello";
		String str3 = new String("hello");
		String str4 = new String("hello");
		
		System.out.println("str1==str2" + (str1==str2)); //true
		System.out.println("str2==str3" + (str2==str3)); //false
		System.out.println("str3==str4" + (str3==str4)); //false
		System.out.println("str3.equals(str4)" + (str3.equals(str4))); //true
		//String類重寫了Object的equals方法,比較的時兩個字串物件的內容
		//"=="用於比較引用資料型別資料的時候比較的時兩個物件的記憶體地址,equals方法預設情況下比較也是兩個物件的記憶體地址
	}
}

String str="hello"方式建立字串時,jvm會先檢查字串常量池是否存在該字串的物件,如果已經存在,那麼就不會在字串常量池中建立了,直接返回該字串在字串常量池中記憶體地址,如果該字串還不存在在字串常量池中,那麼就會在字串常量池中首先建立該字串的物件,然乎再將地址返回到棧記憶體

new String(“hello”)這種方式建立字串時,jvm先會檢查字串常量池中是否存在"hello"的字串,如果已經存在,則不會在字串常量池中建立了,如果還沒有存在,那麼就會在字串常量池中建立"hello"字串,然後還會到堆記憶體中再建立一份字串的物件,把字串常量池中的"hello"字串內容拷貝到堆記憶體中的字串物件,然後返回堆記憶體中字串物件的記憶體地址。

在這裡插入圖片描述

相關文章