美文网首页Android基础Java 基础
Java 常用类 06. Java 可变字符串 StringBu

Java 常用类 06. Java 可变字符串 StringBu

作者: yjtuuige | 来源:发表于2021-12-17 10:53 被阅读0次

    概述:

    • String 特性:内容一旦声明则 不可改变,如果要改变,改变的是 String 的 引用地址
    • 如果一个字符串要经常改变,使用 String 不太合适,使用 StringBuffer 或 StringBuilder 更好。

    区别

    与 String 的区别

    • 效率比 String 高;
    • 比 String 节省内存;
    • 没有字符串缓冲区,初始容量为 16 个字符。

    StringBuffer 与 StringBuilder 的区别

    • StringBuffer:可变长字符串,JDK1.0 提供,相较与 StringBuilder 效率较慢、线程安全。(建议多线程)
    • StringBuilder:可变长字符串,JDK5.0 提供,运行效率快、线程不安全。(建议单线程)
    • 总体的用法上没有太大差别,如果是 单线程用 StringBuilder 效率更高,多线程使用 StringBuffer 更安全

    常用方法:

    方法 描述
    append(String str) 在 StringBuffer 中提供了大量的追加操作(与 String 中使用的 "+" 类似)
    insert(int offset,String str) 在指定位置处加上指定字符串
    reverse() 将内容反转保存
    replace(int start,int end,String str) 指定内容替换
    lenth() 字符串的长度
    delete(int start,int end) 删除指定范围的字符串
    toString() Object 类继承的方法,用于将内容变为 String 类型
    • StringBuilder、StringBuffer 支持的方法大部分与 String 类似,更多方法:查看相关API文档

    • 实例

    package com.base.demo04;
    
    public class Test08 {
        public static void main(String[] args) {
            // StringBuffer 和 StringBuilder 用法一致
            StringBuffer sb = new StringBuffer();
            // 1.append(); 追加字符串
            sb.append("HELLO");
            System.out.println(sb);
            // 2.insert(int offset,String str); 指定位置插入字符串
            // 在第5个位置插入,下标从0开始,越界会异常
            System.out.println(sb.insert(5, " World!"));
            // 3.replace(int start,int end,String str); 指定位置内容替换 (左闭右开)
            sb.replace(0,5,"Hello");
            System.out.println(sb);
            // 4.delete(int start,int end); 删除指定位置字符串 (左闭右开)
            sb.delete(5,9);
            //  sb.delete(0,sb.length());  清空
            System.out.println(sb);
            // 5. reverse(); 将字符串反转
            System.out.println(sb.reverse());
            // 6.toString(); 将内容转换为 String 类型
            System.out.println(sb.getClass());
            System.out.println("======= toString后 ======");
            System.out.println(sb.toString().getClass());
        }
    }
    
    • 运行结果
    • 三者效率对比
    package com.base.demo04;
    
    public class Test09 {
        public static void main(String[] args) {
            // 运行效率对比
            // 1.String
            String str = "";
            long start = System.currentTimeMillis();    // 开始时间
            for (int i = 0; i < 99999; i++) {
                str += i;   // 字符串拼接
            }
            long end = System.currentTimeMillis();  // 结束时间
            System.out.println("String用时:" + (end - start));
            // 2.StringBuffer
            StringBuffer sb = new StringBuffer();
            long start1 = System.currentTimeMillis();   // 开始时间
            for (int i = 0; i < 99999; i++) {
                sb.append(i);   // 字符串拼接
            }
            long end1 = System.currentTimeMillis();  // 结束时间
            System.out.println("StringBuffer用时:" + (end1 - start1));
            // 3.StringBuilder
            StringBuilder sb2 = new StringBuilder();
            long start2 = System.currentTimeMillis();   // 开始时间
            for (int i = 0; i < 99999; i++) {
                sb2.append(i);   // 字符串拼接
            }
            long end2 = System.currentTimeMillis();  // 结束时间
            System.out.println("StringBuilder用时:" + (end2 - start2));
        }
    }
    
    • 运行结果:单位为 ms

    总结:

    • 在字符串经常被更改的情况下,使用 StringBuffer 或 StringBuilder 能够大大的提高效率

    相关文章

      网友评论

        本文标题:Java 常用类 06. Java 可变字符串 StringBu

        本文链接:https://www.haomeiwen.com/subject/smiefrtx.html