string類被final修飾詞修飾,代表不可修改的特性,它實現了三個介面,serializable是序列化介面,compareble是排序介面,char是字串行介面。
public final class string implements serializable, comparable, charsequence
char:string通過char來實現string的各種功能,字串由字元陣列實現。
hash:用於快取hash值,因為string類是final不可修改的,所以hash值也是固定的,為了避免重複計算hash值而快取。
case_insensitive_order:排序器,由上可知string類實現了compareble介面,這裡的comparator用於忽視大小寫的字串的比較。
string共有15個過載建構函式,入參這幾種:空、char、string、stringbuffer、stringbuilder、byte,通過這些來構造字串物件。private final char value;
private int hash;
public static final comparatorcase_insensitive_order = new string.caseinsensitivecomparator();
通過獲取char的長度來獲取字串的長度//第一種,入參為空,新建了大小為0的char陣列,這就是空字串
public string()
//第二種,入參為string物件,直接將入參的屬性複製過來
public string(string var1)
//第三種,入參為char,將value賦值為入參var1
public string(char var1)
//第四種,入參為char,擷取char中從var2到var3的字元作為字串
public string(char var1, int var2, int var3) else if (var3 < 0) else if (var2 > var1.length - var3) else
}public string(int var1, int var2, int var3) else if (var3 < 0) else if (var2 > var1.length - var3) else
++var5;}}
char var10 = new char[var5];
var7 = var2;
for(int var8 = 0; var7 < var4; ++var8) else
++var7;
}this.value = var10;}}
/** @deprecated */
@deprecated
public string(byte var1, int var2, int var3, int var4)
} else
}this.value = var5;
}/** @deprecated */
@deprecated
public string(byte var1, int var2)
private static void checkbounds(byte var0, int var1, int var2) else if (var1 < 0) else if (var1 > var0.length - var2)
}public string(byte var1, int var2, int var3, string var4) throws unsupportedencodingexception else
}public string(byte var1, int var2, int var3, charset var4) else
}public string(byte var1, string var2) throws unsupportedencodingexception
public string(byte var1, charset var2)
public string(byte var1, int var2, int var3)
public string(byte var1)
public string(stringbuffer var1)
}public string(stringbuilder var1)
string(char var1, boolean var2)
/** @deprecated */
@deprecated
string(int var1, int var2, char var3)
public int length()
通過判斷char的長度是否為0來判斷是否為空
public boolean isempty()
通過char陣列下標獲取到對應位置的char字元
首先比較記憶體位址,再判斷是否是string型別,然後再判斷長度,最後逐個比較其中的char。public char charat(int var1) else
}
這裡的hash值計算有個特點,就是string內部快取了hash值,如果hash值不為0則直接返回,不需要再次進行計算,因為string是被final修飾的,它不會被修改,所以沒有必要每次都重新計算hash值。public boolean equals(object var1) else
}return true;}}
return false;
}}
通過兩個字串的第乙個不一樣的字元來比較大小並返回結果,若兩個字串的字元都一樣則比較兩個字串的長度。public int hashcode()
//計算好後將hash值賦值給成員變數hash
this.hash = var1;
}//最後返回hash值
return var1;
}
public int compareto(string str)
}//若兩個字串迴圈比較的字元是一樣的,那麼使用字串長度來比較大小
return thislen - strlen;
}
JDK原始碼解析 String類
equals方法相信大家都比較熟悉和了解了,string的equals方法主要用來比較string物件內容序列的異同,原始碼如下 public boolean equals object anobject 判斷是否是string型別 if anobject instanceof string ret...
String類equals 原始碼逐行解析
上原始碼 基本型別沒有equals方法,因為equals方法的是object的方法,基本型別沒有繼承這個類。基本型別用 比較的是值。而對於類來說,比較的位址,即是不是在同乙個位址的同一物件。在obect類中,equals方法內部比較用的是 但很多類都重寫了這個方法,使其比較的是內容。來看string...
Fabric 原始碼解析 原始碼目錄解析
這裡對重要的一些目錄進行說明 bccsp 與密碼學 加密 簽名 證書等等 相關的加密服務 將fabric中用到的密碼學相關的函式抽象成了一組介面,便於拓展。bddtests 一種新型的軟體開發模式 行為驅動開 需求 開發 common 一些公共庫 錯誤處理 日誌處理 賬本儲存 策略以及各種工具等等 ...