常用类库——String
概述
String
类表示字符串。 Java程序中的所有字符串文字(例如"abc"
)都实现为此类的实例。
特性
-
字符串是不变的; 它们的值在创建后无法更改。因为字符串在内存中本质上是字符数组,数组一经声明大小就不能变了。
-
因为String对象是不可变的(静态),所以为了节约内存,对于相同内容的字符串,所有引用都指向同一块内存地址。但是,如果使用new方法,则不管内容是否相同都新划分一个内存。
字符串常量池
一个专门存已有字符串引用的空间,位置在堆中。
字符串的创建
凡是使用new方法,就是在堆中创建一个String对象并返回引用。
凡是使用String s="xxx"的方法,就是先查看字符串常量池,如果字符串常量池有引用则返回,否则调用intern()
JDK1.7之前:intern()
方法首先检测是否有所需字符串,没有则在方法区创建一个,有则把堆中的对象复制一份存到方法区。然后把方法区对象的引用加入字符串常量池。最后返回这个引用。
JDK1.8之后:intern()
方法首先检测是否有所需字符串,没有则在方法区创建一个,把方法区对象的引用加入字符串常量池。有则直接把堆中对象的引用加入字符串常量池。最后返回这个引用。
构造方法
String(byte[] bytes)
String(byte[] bytes, Charset charset)
字符串的拼接
由于使用+运算拼接String会产生大量的中间字符串,这些字符串永远不会被回收,很容易造成内存泄漏。
因此,涉及字符串拼接应使用StringBuffer\StringBuilder,这两个类的方法完全一样,区别是StringBuffer是线程安全的实现,而StringBuffer是线程不安全的实现。
构造方法
StringBuffer()
追加
public StringBuffer append(传入数据)
转String
toString()
参考文章