jdk1.7之下的inern用法:
string s = new string("1aaa");
s.intern();
string s2 = "1aaa"
; system.out
.println(s2 == s.intern()); true
system.out
.println(s == s.intern()); false
string s = new string(「1aaa」);
生成了常量池的「1」和堆空間中的字串物件。 s為堆空間的記憶體位址。
s.inern() 檢查物件s是否在常量池中存在,如果存在然後返回該字串在常量池中的位址。
string s2 = 「1aaa」; s2指向的是「1aaa」 在常量池中的位址。因此
s2 == s.intern()為true。
string s3 = new
string("1a") + new
string("1a");
s3.intern();
string s4 = "1a1a";
system.out.println(s4 == s3.intern()); true
string s3 = new string(「1a」) + new string(「1a」);
在常量池中生成字串la,並在堆中生成s3指向的堆空間,內容為lala。
此時常量池中沒有lala
s3.intern(); 檢查常量池中是否有lala,如果沒有,則將lala放入常量池中。並返回常量池的位址。
s.inern檢查常量池中是否存在某乙個常量,如果存在則返回這個常量的值。
如果不存在,將字串s的內容放入string常量池中,具體在jdk1.7中常量池不需要再儲存乙份物件了,可以直接儲存堆中的引用,也就是s==s.inern 返回true。
ps: s==s.inern並不總是成立。如果常量池中已經存在了這個字串,則s==s.inern並不相等。
myEclipse配置jdk1 7教程
位址 鏈結 密碼 wrmf 第二步 安裝jdk1.7 將 的壓縮包進行解壓,得到乙個jdk 7程式設計客棧u17 windows x64.exe的檔案,直接程式設計客棧雙擊執行,安裝完成。第三步 在專案上右鍵 properties,選擇j a build path,點程式設計客棧擊jre syste...
JDK1 7的HashMap死迴圈
為什麼在jdk1.7多執行緒情況下會很容易出現hashmap死迴圈,這個還是要根據它採取的擴容策略來看,它的擴容策略是頭插法,因此會導致這樣的問題。在jdk1.8改進為尾插法,但並不意味著尾插法能適應多執行緒併發的場景,我認為其最主要的考慮就是頭插法在正常情況下是與原來鍊錶順序相逆的,而尾插不會改變...
JDK1 7和JDK1 8HashMap的區別
jdk1.7與jdk1.8中hashmap區別 最重要的一點是底層結構不一樣,1.7是陣列 鍊錶,1.8則是陣列 鍊錶 紅黑樹結構 jdk1.7中當雜湊表為空時,會先呼叫inflatetable 初始化乙個陣列 而1.8則是直接呼叫resize 擴容 插入鍵值對的put方法的區別,1.8中會將節點插...