Class About String In Package Of Java Lang
这篇笔记主要用于分析Java中String系列的源代码。以下是String系列的的类层次结构图。这篇博文主要目的在于分析String系列源码思想、以及String系列类型之间的关系,以及性能等。
第一序 String类型源码解析
String类型是一个final类型,是不允许继承一改变的。
1.持有成员变量
一直疑惑String字符串类型为什么那么类似于字符数组char[ ],分析源码后将会发现,本质就是字符数组。String类型持有私有访问权限的字符数组。
源码:private
final
char
value
[];
都发现String中的字符串是连续不可变的,也正说明该value[ ]数组是final类型。同事Java程序中将类似于“abc”这样的字符串编译为String类型的实例对象,至于这个实现细节有待于进一步学习!
同时String类型实现了Serializable序列化标记接口,所以拥有序列化ID。
源码:private
static
final
long
serialVersionUID
= -6849794470754667710L;
String类型持有一个整形,作为hash值。
源码:
private
int
hash
;
2.实例构造器
a.无参构造器
public
String() {
this . value = new char [0];
this . value = new char [0];
}
b.字符数组作为入参构造器
public
String(
char
value
[]) {
this . value = Arrays.copyOf( value , value . length );
this . value = Arrays.copyOf( value , value . length );
}
c.”abc”这样的字符串作为入参构造器
public
String(String
original
) {
this . value = original . value ;
this . hash = original . hash ;
this . value = original . value ;
this . hash = original . hash ;
}
d.整形数组作为入参构造器
public
String(
int
[]
codePoints
,
int
offset
,
int
count
) {
if ( offset < 0) {
throw new StringIndexOutOfBoundsException( offset );
}
if ( count < 0) {
throw new StringIndexOutOfBoundsException( count );
}
// Note: offset or count might be near -1>>>1.
if ( offset >
if ( offset < 0) {
throw new StringIndexOutOfBoundsException( offset );
}
if ( count < 0) {
throw new StringIndexOutOfBoundsException( count );
}
// Note: offset or count might be near -1>>>1.
if ( offset >