探秘Java中String、StringBuilder和StringBuffer
相信String這個類是Java中使用得最頻繁的類之1,并且又是各大公司面試喜歡問到的地方,今天就來和大家1起學習1下String、StringBuilder和StringBuffer這幾個類,分析它們的異同點和了解各個類適用的場景。下面是本文的目錄大綱:
1.你了解String類嗎?
2.深入理解String、StringBuffer、StringBuilder
3.不同場景下3個類的性能測試
4.常見的關于String、StringBuffer的面試題(辟謠網上流傳的1些歪曲String類的說法)
若有不正的地方,請多多體諒和指正,不勝感激。
請尊重作者勞動成果,轉載請標明轉載地址:
http://www.cnblogs.com/dolphin0520/p/3778589.html
想要了解1個類,最好的辦法就是看這個類的實現源代碼,String類的實現在
\jdk1.6.0_14\src\java\lang\String.java 文件中。
打開這個類文件就會發現String類是被final修飾的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
public final class String implements java.io.Serializable,
Comparable<String>, CharSequence { /**
The value is used for character storage. */ private final char value[]; /**
The offset is the first index of the storage that is used. */ private final int offset; /**
The count is the number of characters in the String. */ private final int count; /**
Cache the hash code for the string */ private int hash; //
Default to 0 /**
use serialVersionUID from JDK 1.0.2 for interoperability */ private static final long serialVersionUID
= ⑹849794470754667710L; ...... } |
從上面可以看出幾點:
1)String類是final類,也即意味著String類不能被繼承,并且它的成員方法都默許為final方法。在Java中,被final修飾的類是不允許被繼承的,并且該類中的成員方法都默許為final方法。在初期的JVM實現版本中,被final修飾的方法會被轉為內嵌調用以提升履行效力。而從Java SE5/6開始,就漸漸擯棄這類方式了。因此在現在的Java SE版本中,不需要斟酌用final去提升方法調用效力。只有在肯定不想讓該方法被覆蓋時,才將方法設置為final。
2)上面羅列出了String類中所有的成員屬性,從上面可以看出String類實際上是通過char數組來保存字符串的。
下面再繼續看String類的1些方法實現: