Java面试题:java 中操作字符串都有哪些类?它们之间有什么区别?

本文将介绍在 java 中操作字符串都有哪些类,这些类之间有什么区别。

Java 中操作字符串的类有三个,分别是:StringStringBuffer(线程安全)、StringBuilder(非线程安全)。

它们的区别

区别一:对象创建方式

String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象,而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String,而选择使用 StringBuffer 或 StringBuilder 类。例如:

public class Demo {

    public static void main(String[] args) {
        StringBuilder builder = new StringBuilder();
        for(int i = 0; i < 10; i++) {
            if(builder.length() > 0) {
                builder.append(",");
            }
            builder.append("i=").append(i);
        }
        System.out.println(builder.toString());
    }

}

运行示例,输出如下:

i=0,i=1,i=2,i=3,i=4,i=5,i=6,i=7,i=8,i=9

区别二:线程安全

StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但 StringBuilder 的性能却高于 StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。下面将简单测试 StringBuilder 和 StringBuffer 的性能,代码如下:

public class Demo {

    public static void main(String[] args) {
        int n = 100000;
        stringBuffer(n);
        stringBuilder(n);
    }

    private static void stringBuilder(int n) {
        long start = System.currentTimeMillis();
        StringBuilder builder = new StringBuilder();
        for(int i = 0; i < n; i++) {
            builder.append("i=").append(i);
        }
        System.out.println("StringBuilder " + (System.currentTimeMillis() - start) + "ms");
    }

    private static void stringBuffer(int n) {
        long start = System.currentTimeMillis();
        StringBuffer buffer = new StringBuffer();
        for(int i = 0; i < n; i++) {
            buffer.append("i=").append(i);
        }
        System.out.println("StringBuffer " + (System.currentTimeMillis() - start) + "ms");
    }

}

运行示例,输出如下:

StringBuffer 38ms
StringBuilder 20ms
意志坚强的人能把世界放在手中像泥块一样任意揉捏。——歌德
1 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号