【當年筆記】字串
阿新 • • 發佈:2022-05-27
1 String 特性
* String 是不可變類(immutable),對它的任何改動,其實就是建立了一個新物件,再把引用指向該物件; * String 物件賦值之後會快取到在常量池中,下次建立會判斷常量池是否已經有對應的快取物件,如果有就直接返回該引用。2字串常用方法
substring(2) 從下標2擷取到最後 ,substring(2,6) 從下標2擷取到下標6 字串。 equals("xxx") 比較字串值是否相同 equalsIgnoreCase("xxx") 忽略字串的大小寫對比值是否相等 length() 獲取字串長度 intern() 方法用於查詢常量池中是否存在該字元值,如果常量池中不存在則先在常量池中建立,如果已經存在則直接返回。3 StringBuffer、StringBuilder
4 "==" 和 equals 的區別是什麼?
"==" 對基本型別來說是值比較,對於引用型別來說是比較的是引用;而 equals 預設情況下是引用比較,只是很多類重寫了 equals 方法,比如 String、Integer 等把它變成了值比較,所以一般情況下 equals 比較的是值是否相等。5 為什麼重寫equals方法還要重寫hashcode方法
1.為了提高效率。HashSet、HashMap等等hash類儲存結構,新增元素會有重複性校驗,校驗的方式就是先取hashCode判斷是否相等,然後再取equals方法比較,最終判定該儲存結構中是否有重複元素。重寫hashcode方法,在進行hashcode比較時直接時直接篩選出資料,減少equals次數 ,提高效率。
2.保證equals相同的情況下hashcode值必定相同
6 String 不可變都有哪些好處?
*不可變方便使用常量池儲存,節約空間;
*避免一些安全漏洞 ,如Socket 程式設計中,主機名和埠都是以字串的形式傳入,因為字串是不可變的,無法直接改變值使主機和埠指向其他地址。