Java成神之路(五)String類

2021-09-13 19:30:10 字數 1677 閱讀 4789

string 類

字串string的不可變性:

一旦建立,便具有不可變性,物件的引用與物件的區別,物件是記憶體的記憶體塊,物件的引用是4位元組的資料,存放指向物件的位址,string 的操作,會生成新的物件,改變了引用,沒有改變物件本身。其實用反射可以改變其value

string,不可改變的原因與好處

效率與安全,這也是不可改變物件的最重要作用:執行緒安全,拷貝物件複製位址即可。亦是字串常量池的需要

string類的不可改變好處:節省字串池的空間,多執行緒安全,

jdk1.6和jdk1.7對substring 的區別

substring(int beginindex,int endindex)方法用於分割字串,返回一定範圍內的字串。字串實際為乙個字串陣列,

1.6中包含三個屬性域:value(實際字元陣列)、offset(第一索引)、count(個數)呼叫substring時,value指向不變,改變的是其他兩個的值,使用私有構造,共享value提公升速度,導致記憶體占有率大。即this.value=value,解決辦法:str=str.substring(beginindex,endindex)+「」,生成新的完全物件,改變其value。

1.7中,使用公有構造 ,使用this.value = arrays.copyofrange(value, offset, offset+count);返回新的物件,解決記憶體洩漏問題。但是效率慢了。

replacefirst、replaceall、replace的區別

replacefirst 遇到的替換第乙個字元,運用正則,replaceall,替換所有,運用正則,replace 全替換,沒有正則。由於string的不可變,替換後生成的新的字串,原來的字串物件是不變的。

字串拼接的五種方式

string.concat()、string.join(),string.format()、+、stringbuilder.apend()。stringbuilder效能最優,是其他後兩種的基礎,join用於拼接字串陣列或者集合,concat()、+更適合與小資料,format 常用語日期格式。

string.valueof()和integer.tostring()

integer.tostring()返回指定的整數有符號位的string物件,十進位制字串,需判斷空值。string.valueof()有大量的過載,會允許空值,本質呼叫了integer.tostring()。

switch 對string進行了支援。

本質是先通過hashcode來比較,如果一樣,再通過equals()比較。

如果雜湊值相同,使用else if判斷。

字串池,常量池(執行時常量池、class常量池)

string str =」abc」效率比string str =new string(「abc」)好,就是因為前者去先去字串池尋找是否存在「abc」這個字串,如果存在,將該字串物件的首位址賦值為str,沒有則建立。

class常量池,即靜態常量池,包含字面量(final常量池,浮點數是不入常量池的)、符號引用量(類和介面的全限定名,欄位和方法名稱和描述符)。

執行時常量,儲存在方法區,方法區執行緒共享,所以常量池共享。在執行期間也可能將新的常量放入池中, 如intern(),實現物件的動態共享,節省記憶體,節省時間。

string.intern()

把字串物件放入常量池中,共享物件,執行緒共享。new的物件都放在堆中,引用才放入棧中。

Java成神之路(九)IO類

io類 字元流 位元組流 輸入流 輸出流 相對於程式而言 位元組流 輸入流 輸出流的傳輸方式,基本單位是位元組,位元組的資料一般需要設定編碼。位元組輸入流 inputstream 抽象基類,定義了read byte b read byte b,int off int len close 等類 fil...

Java成神之路(三) 基本資料型別

一 基本資料型別 8種基本型別 整型 浮點型 布林型 字元型 整型 byte 8位,有符號,二進位制補碼,預設為0,27 27 1 short 16位,有符號,二進位制補碼,預設為0,215 215 1 int 32位,有符號,二進位制補碼,預設為0,231 231 1 long 64位,有符號,二...

C 成神之路 3 開發程式計畫

1 這裡討論下關於開發程式的步驟,一點初學者的感悟。1 初始化 初始化負責建立程式的執行環境,該步驟發生在使用者看到螢幕上的任何內容之前。2 輸入 驗證輸入的有效性是程式編譯的良好習慣。3 處理 接受程式輸入並以某種方式處理輸入的步驟。用不同的演算法去獲得程式中的相同輸入,要始終保持開放的思想。4 ...