字串常量池,程式當中直接寫上雙引號字串,就在字串常量池中
* 對於基本型別來說 == 是進行數值得比較
* 對於引用型別來說 == 是進行【位址值】比較
string s1 = "abc";
string s2 = "abc";
system.out.println(s1==s2);
結果是 true;
採用字面值的方式建立乙個字串時,jvm首先會去字串池中查詢是否存在"abc"這個物件,如果不存在,則在字串常量池中建立"abc"這個物件,然後將池中"abc"這個物件的引用位址返回給"abc"物件的引用s1,這樣s1會指向字串常量池中"abc"這個字串物件;如果存在,則不建立任何物件,直接將池中"abc"這個物件的位址返回,賦給引用s2。因為s1、s2都是指向同乙個字串池中的"abc"物件,所以結果為true。
string s3 = new string("xyz");
string s4 = new string("xyz");
system.out.println(s3==s4);
結果是 false
採用new關鍵字新建乙個字串物件時,jvm首先在字串池中查詢有沒有"xyz"這個字串物件,如果有,則不在池中再去建立"xyz"這個物件了,直接在堆中建立乙個"xyz"字串物件,然後將堆中的這個"xyz"物件的位址返回賦給引用s3,這樣,s3就指向了堆中建立的這個"xyz"字串物件;如果沒有,則首先在字串池中建立乙個"xyz"字串物件,然後再在堆中建立乙個"xyz"字串物件,然後將堆中這個"xyz"字串物件的位址返回賦給s3引用,這樣,s3指向了堆中建立的這個"xyz"字串物件。s4則指向了堆中建立的另乙個"xyz"字串物件。s3 、s4是兩個指向不同物件的引用,結果當然是false。
JAVA 字串常量池
system.out.println s s1 string 類 equals 重寫 比較的內容 system.out.println s.equals s1 字串是常量,它們的值在建立之後不能更改 一旦修改字串儲存的資料 自動建立乙個的物件內部儲存是修改的資料 string s2 abc new ...
字串常量池
string的不可變性。字串常量池是不會儲存相同內容的字串。xx stringtablesize設定stringtable的長度。jdk8最小值為1009 string的string pool是固定大小的hashtable 字串常量池在堆中。字串拼接操作 和 equals equals 對於obje...
字串常量池
string a hello string b hello string aa new string aa string bb new string bb 字串常量池在方法區中 其中 變數a jvm先到字串常量池中尋找如果沒有就在字串常量池中建立乙個字串hello,並且將該字串常量池的hello的記...