龙空技术网

String类三兄弟的使用和注意事项详解

小林的美好生活 174

前言:

如今咱们对“java求最后一个字符串的长度和宽度”可能比较注重,朋友们都需要了解一些“java求最后一个字符串的长度和宽度”的相关内容。那么小编在网络上收集了一些关于“java求最后一个字符串的长度和宽度””的相关内容,希望朋友们能喜欢,各位老铁们快快来了解一下吧!

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

一、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的设置,看这篇文章就够了

标签: #java求最后一个字符串的长度和宽度