String、StringBuffer和StringBuilder总结

1. String

(1)String不可变(使用final修饰)
(2)本质还是使用数组存储
(3)String可以使用“+”连接String,会生成最终的新String,但是会产生一大堆需要回收的中间对象
(4)String+任何基本类型都会转化为String类型
(5)改变字符串内容时,String方法都会返回一个新的String对象
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];
    //......
    }

常用方法源代码分析:
1.实现接口Comparable中的compareTo方法,来进行字符串间的比较。

public int compareTo(String anotherString) {
        int len1 = value.length;
        int len2 = anotherString.value.length;
        int lim = Math.min(len1, len2);
        char v1[] = value;
        char v2[] = anotherString.value;

        int k = 0;
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2;
    }

在Java中用于String的“+”与“+=”是java中仅有的两个重载过的操作符,而java中禁止程序员重载任何操作符。

2. StringBuilder

(1)使用场景一:在String使用+进行连接时,底层实际上使用的是StringBuilder,因为它更高效。
(2)和StringBuffer相比线程不安全,但是StringBuffer线程开销大。
(3)是JavaSE5 引入的
(4)大部分功能和StringBuffer相似

3. StringBuffer

(1)线程安全,但是开销大。
(2)频繁修改字符串的情况考虑使用StingBuffer
(3)将StringBuffer转化为String可以调用toString()方法

4.String、StringBuffer、StringBuilder的区别:

4.1String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.
4.2StringBuffer与StringBuilder大部分功能是相似的
4.3StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作

你可能感兴趣的:(JAVA,字符串,java)