Java八大常用类(四) StringBuffer和StringBuilder类

简介: StringBuffer和StringBuilder 非常类似,均代表可变的字符序列。这两个类都是抽象类的,方法一模一样StringBuffer线程安全,做线程同步检查,效率低StringBuilder线程不安全,不做线程同步检查,效率较高,建议使用该类StringBuilder的使用速度对比:package oop2.demo06;public class StringF { public static void main(String[] args) { String str = "bnu"; StringBuilder bui

StringBuffer和StringBuilder 非常类似,均代表可变的字符序列。这两个类都是抽象类的,方法一模一样

StringBuffer线程安全,做线程同步检查,效率低

StringBuilder线程不安全,不做线程同步检查,效率较高,建议使用该类

StringBuilder的使用

速度对比:

package oop2.demo06;
public class StringF {
    public static void main(String[] args) {
        String str = "bnu";
        StringBuilder builder = new StringBuilder();
        long l = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            //str = str.concat("sxt");
            //builder.append("sxt");
        }
        long l1 = System.currentTimeMillis();
        System.out.println(l1-l);     //查看运行的时间,用以对比StringBuilder 和String运行的速度
    }
}
一些常用方法:
package oop2.demo06;
public class StringG {
    public static void main(String[] args) {
        //String s = "bnu";
        StringBuilder builder = new StringBuilder("bnu");
        builder.append("北京师范大学");     //内容追加的方法 ,常用。
        builder.insert(0,"BNU");   //指定的位置插入字符串。数组下标从0开始
        char c = builder.charAt(2);   //取出指定下标字符
        builder.setCharAt(3,'J');    //设置指定位置的的字符
        builder.replace(0,4,"北师大");    //进行指定位置的字符替换  [0,4)
        builder.deleteCharAt(3);  //删除指定位置字符
        builder.delete(1,3);   //删除多个字符 [1, 3)
        builder.reverse();   //倒序输出字符串
        System.out.println(builder);
        System.out.println(c);
        //String类型与  StringBuilder类 互转
        String str = "bnu";
        StringBuilder stringBuilder = new StringBuilder(str);
        String s = stringBuilder.toString();
    }
}

一些面试题

StringBuilder 底层默认char数组长度为16

StringBuilder 底层的扩容机制 是 : 原有的数组长度*2+2

package oop2.demo06;
public class StringL {
    public static void main(String[] args) {
        String str = "abcd";
        String a = "a";
        String b = "b";
        String c = "c";
        String d = "d";
        //字符串拼接的时候,如果全部是常量 ,和直接写一个结果的含义是一样的
        String str2 = "a" + "b" + "c" + "d";    //创建了几个对象?  1个
        String str3 = a+b+c+d;     //创建了1个对象
        //只要含有变量的连接,采用的就是优化的机制:
        StringBuilder builder = new StringBuilder();
        builder.append(a);
        builder.append(b);
        builder.append(c);
        builder.append(d);
        System.out.println(str==str2);  //true
        System.out.println(str2==str3);  //false
    }
}
相关文章
|
1天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
29天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
46 8
|
27天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
48 2
|
1月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
65 1
|
1月前
|
安全
String、StringBuffer、StringBuilder的区别
String 由 char[] 数组构成,使用了 final 修饰,对 String 进行改变时每次都会新生成一个 String 对象,然后把指针指向新的引用对象。 StringBuffer可变并且线程安全;有一定缓冲区容量,字符串大小没超过容量,不会重新分配新的容量,适合多线程操作字符串; StringBuiler可变并且线程不安全。速度比StringBuffer更快,适合单线程操作字符串。 操作少量字符数据用 String;单线程操作大量数据用 StringBuilder;多线程操作大量数据用 StringBuffer
|
1月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
1月前
|
Java Android开发
Eclipse 创建 Java 类
Eclipse 创建 Java 类
26 0
|
3月前
|
Java 索引
java基础(13)String类
本文介绍了Java中String类的多种操作方法,包括字符串拼接、获取长度、去除空格、替换、截取、分割、比较和查找字符等。
46 0
java基础(13)String类
|
2月前
|
Java
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
本文深入探讨了Java中方法参数的传递机制,包括值传递和引用传递的区别,以及String类对象的不可变性。通过详细讲解和示例代码,帮助读者理解参数传递的内部原理,并掌握在实际编程中正确处理参数传递的方法。关键词:Java, 方法参数传递, 值传递, 引用传递, String不可变性。
68 1
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
|
2月前
|
安全 Java 测试技术
Java零基础-StringBuffer 类详解
【10月更文挑战第9天】Java零基础教学篇,手把手实践教学!
52 2