探秘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些方法实现: