String、StringBuffer、StringBuilde

2018-06-12  本文已影响6人  erki_stwee

在日常开发中我们经常用到字符串,不管是数量还是体积,字符串都占据了应用开发中很重要的地位。

String

典型的Immutable类(不可变),声明为final class,所有属性也都是final的。也由于它的不可变性,类似拼接,裁剪字符串等操作,都会产生新的String对象,会对应用性能有明显影响。Java为了避免在一个系统中产生大量的String对象,引入了一个字符串常量池。

字符串常量池机制:
创建一个字符串,首先检查池中是否有值相等的字符串对象,如果有则不需要创建直接从池中查找;如果没有则新建一个,返回对象引用,并且将新创建的对象放入池中。但是new 一个字符串并不满足上述条件。

例如:

public void test(){
        String str1 = "123";//存在于字符串常亮池
        String str2 = new String("123");//通过new的方式赋值,不放入字符串常量池
}

StringBuffer和StringBuilder

StringBuffer和StringBuilder是为了解决上述问题提供的一个类。我们可以用append或者add方法,把字符串添加到已有序列的末尾或者指定位置。StringBuffer是现场安全的,但是会有额外的性能开销;StringBuilder是线程不安全;绝大部分情况下进行字符串的拼接首选StringBuilder。

知识扩展

StringBuilder append = 
                new StringBuilder().append("a").append("b").append("c");
String str = "a" + "b" + "c";

如果不涉及到频繁的修改等操作,建议还是采用第二种写法。毕竟可读性好。

上一篇 下一篇

猜你喜欢

热点阅读