java字符串

2016-08-29  本文已影响0人  追风的徐小白

1. 字符串

String在java.lang包里,是个final类,不可被继承。它的主要通过一个字符数组来存储。

private final char value[];

2. 字符串的不可改变特性(immutable)

2.1 什么是不可变

比如,String a = "abc";a = "abcdef",不是在原内存地址上修改数据,而是在内存区域重新创建了值为"abcdef"的字符串(如果字符串池中"abcdef"已存在,则不创建),将a指向此内存地址。

2.2 不可变有什么好处

Java把String设成immutable最大的原因应该是效率和安全。

2.3 如何实现的不可变

String的主要成员 char []value 是 private final的。final限制了value这个存在stack中的引用地址不能改变。但是,heap中数组存储的数据怎么保证不变呢?String中的所有方法都没有动value数组中的数据,private 私有修饰符确保不暴露给外界,并且String中也没有value的setter方法。String类的final属性,防止继承者破坏。

3. 字符串常量池

如果按照下面赋值:

String a = "aa";
String aa = "aa";

则a 和 aa 指向同一个内存地址.

上一篇下一篇

猜你喜欢

热点阅读