zoukankan      html  css  js  c++  java
  • StringBuilder类的作用,以及与String类的相互转换

    # 转载请留言联系

    先看一段String类的字符串拼接的代码。

    String s = "hello" 会在常量池开辟一个内存空间来存储”hello"。

    s += "world"会先在常量池开辟一个内存空间来存储“world"。然后再开辟一个内存空间来存储”helloworld“。

    这么以来,001与002就成为了垃圾内存空间了。这么简单的一个操作就产生了两个垃圾内存空间,如果有大量的字符串拼接,将会造成极大的浪费。

    • StringBuilder

    StringBuilder类是一个可变的字符序列。

    构造方法摘要:

    StringBuilder()
              构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符。
    StringBuilder(CharSequence seq)
              构造一个字符串生成器,它包含与指定的 CharSequence 相同的字符。
    StringBuilder(int capacity)
              构造一个不带任何字符的字符串生成器,其初始容量由 capacity 参数指定。
    StringBuilder(String str)
              构造一个字符串生成器,并初始化为指定的字符串内容。

    StringBuilder类的几个常用方法:

    append(任意类型)  追加到字符串后面

    reverse 反转字符串

    insert(int offset, 任意类型)  在某个index后插入字符串

    toString()  返回String类的对象

    • StringBuilder的作用

    上面的例子可以知道String类的字符串拼接会产生大量的垃圾内存空间。但是StringBuilder的字符串拼接是直接在原来的内存空间操作的,即直接在hello这个内存空间把hello拼接为helloworld。

    来证明下:

    public class StringBuilderTest {
        public static void main(String[] args){
            StringBuilder sb = new StringBuilder();
            StringBuilder sb2 = sb.append("hello");
            System.out.println(sb);
            System.out.println(sb2);
            // 引用类型,判断的是他们的内存地址是否一样
            System.out.println(sb == sb2);
        }
    }

    输出结果是:

    hello
    hello
    true

    • String类与StringBuilder类的相互转换

    1.String类转换为StringBuilder类

    public class String12 {
        public static void main(String[] args){
            String s = "hello";
            StringBuilder sb = new StringBuilder(s);
            System.out.println(sb);
        }
    }

    2.StringBuilder类转换为String类

    public class String12 {
        public static void main(String[] args){
            StringBuilder sb = new StringBuilder();
            sb.append("abc").append("efg");
            String s = sb.toString();
            System.out.println(s);
        }
    }

    补充:

    StringBuilder类和StringBuffer类的区别是:

    StringBuffer类是线程安全的,StringBuilder类不是。虽然StringBuffer类比较安全,但是慢。StringBuilder类相反。一般StringBuilder用得多。

  • 相关阅读:
    DPDK安装方法 17.12.13
    numa.h:No such file or directory 解决方法
    17秋 软件工程 第六次作业 Beta冲刺 Scrum3
    17秋 软件工程 第六次作业 Beta冲刺 总结博客
    17秋 软件工程 第六次作业 Beta冲刺 Scrum2
    Paper Reviews and Presentations
    17秋 软件工程 第六次作业 Beta冲刺 Scrum1
    17秋 软件工程 第六次作业 Beta冲刺
    error: could not create '/System/Library/Frameworks/Python.framework/Versions/2.7/share': Operation not permitted
    17秋 软件工程 个人作业 软件产品案例分析
  • 原文地址:https://www.cnblogs.com/chichung/p/10185560.html
Copyright © 2011-2022 走看看