上节我们讲解了关于StringTable的设置相关的知识,这节我们主要讲解下StringStringBuilderStringBuffer的使用场景和区别,话不多说,直接上干货。

一、String类的使用

String类中定义了一个char数组来存储当前String对象的字符串值,数组采用final修饰,不可修改,同时定义了hash字段来存储哈希码,相关源码如下:

    /** The value is used for character storage. */
    private final char value[];

    /** Cache the hash code for the string */
    private int hash; // Default to 0

同时String类也提供了对字符串进行一系列操作的方法,比如,取子串等等。

二、StringBuilder的使用

StringBuilder类从AbstractStringBuilder类继承了两个属性,分别是char数组value和整型count,具体含义如下:

    /**
     * The value is used for character storage.
     */
    char[] value;

    /**
     * The count is the number of characters used.
     */
    int count;

StringBuilder提供了多种构造器供开发者调用,初始化对象,同时默认预留16个char空间供后续字符的新增。

    public StringBuilder(String str) {
        super(str.length() + 16);
        append(str);
    }

StringBuilder是非线程安全的,但是它支持动态的拼接,不会像String对象不可变,造成空间浪费。

三、StringBuffer的使用

StringBuffer类和StringBuilder大同小异,区别在于它是线程安全的,因为它的方法采用synchronized关键字修饰,以下是它的方法,大家可以在使用的过程中活学活用

java.lang.StringBuffer#StringBuffer()  //构造函数
java.lang.StringBuffer#StringBuffer(java.lang.String) //构造函数
java.lang.StringBuffer#length() //返回字符串长度
java.lang.StringBuffer#charAt(int) //返回对应索引位的字符
java.lang.StringBuffer#append(java.lang.String)  //追加字符串至对象末尾
java.lang.StringBuffer#append(char) //追加字符到对象末尾
java.lang.StringBuffer#delete(int, int) //删除索引范围内的字符串
java.lang.StringBuffer#replace(int, int, String) //替换对应索引位的字符串为入参值
java.lang.StringBuffer#substring(int, int) //取子串
java.lang.StringBuffer#insert(int, char) //插入字符
java.lang.StringBuffer#indexOf(java.lang.String) //获取字符串在对象中的索引位
java.lang.StringBuffer#lastIndexOf(java.lang.String) //获取字符串在对象中的最大索引位
java.lang.StringBuffer#reverse() //字符串反转
java.lang.StringBuffer#toString() //输出String

四、总结和建议

在日常项目开发中,对于一些常量,建议使用String类初始化到字符串常量池,减少内存占用,而对于频繁需要变化截取或追加的字符串,建议使用StringBuilder类,在非线程安全的场景下,它的效率是极高的。只有在真正需要满足线程安全场景下对字符串进行修改操作时,才建议使用StringBuffer类来进行编码,这样才能保证编码的合理性。

因篇幅限制,关于String的讲解到这里就告一段落,下一节将开启性能实战之正则表达式篇章,感兴趣的小伙伴可以关注作者,一起学习交流,谢谢大家!以下为String相关文章链接:

String性能问题之字符串复用

关于String的常见疑问,你都知道吗?

关于StringTable的设置,看这篇文章就够了

加客服微信:qiushu0517,开通VIP下载权限!