吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1720|回复: 5
收起左侧

[学习记录] 【自学笔记】 Java基础 - API之StringBuilder

[复制链接]
LongJL 发表于 2021-7-11 16:51

StringBuilder

概述

  • Java.lang.StringBuilder
  • StringBuilder是一个可变的字符串类,可以看做是字符串缓冲区,可以提高字符串的操作效率(看成一个长度可以变换的字符串),底层也是一个数组,但是没有被final修饰,可以改变长度
  • StringBuilder在内存中始终是一个数组,占用空间少,效率高,如果超出了StringBuilder的容量,会自动扩容。

与String的性能对比

public class testStringBuilder {
    public static void main(String[] args) {
        testString();
        testStringBuilder();
    }

    public static void testString(){
        String s = "";
        long start = System.currentTimeMillis(); // 获取1970年1月1日0时0分0秒 到当前时间经历过的的毫秒值

        for (int i=1;i<=50000;i++){
            s +=i;
        }
        long end = System.currentTimeMillis();
        System.out.println("String=>" + " " + (end-start));
    }

    public static void testStringBuilder(){
        StringBuilder stringBuilder = new StringBuilder();
        long start = System.currentTimeMillis(); // 获取1970年1月1日0时0分0秒 到当前时间经历过的的毫秒值

        for (int i=1;i<=50000;i++){
            stringBuilder.append(i);
        }
        long end = System.currentTimeMillis();
        System.out.println("StringBuilder=>" + " " + (end-start));
    }
}

打印结果:
String=> 3780
StringBuilder=> 2

注:+号运算符 对字符串拼接时候会产生垃圾字符串 导致内存变大,再Java底层中会new StringBuilder调用append()完成字符串拼接,再调用toString()方法返回字符串,一个加号,堆内存中俩个对象。

构造方法

  • StringBuilder():构造一个不带任何字符的字符串生成器,其初始容量为16个字符。
  • StringBuilder(String str):构造一个字符串生成器,并初始化为指定的字符串内容
public class CreateStringBuilder {
    public static void main(String[] args) {
        // StringBuilder():构造一个不带任何字符的字符串生成器,其初始容量为16个字符。
        StringBuilder stringBuilder = new StringBuilder();
        System.out.println(stringBuilder);
        // StringBuilder(String str):构造一个字符串生成器,并初始化为指定的字符串内容
        StringBuilder stringBuilder1 = new StringBuilder("abc");
        System.out.println(stringBuilder1);
    }
}

常用方法

  • public StringBuilder append(...):添加任意类型数据的字符串形式,并返回当前对象自身;
    注:
    append方法返回的是this。
    append的方法无序返回值。
  • public String toString():将当前StringBuilder对象转换为String对象
    注:
    String和StringBuilder可以互相转换:
    String->StringBuilder:可以使用StringBuilder的构造方法
    StringBuilder->String:可以使用StringBuilder中的toString方法
  • public StringBuilder reverse() 返回相反的字符序列
  • public int length() 返回长度(字符出现的个数)
public class StringBuilderMethod {
    public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder();

        // public StringBuilder append(...):添加任意类型数据的字符串形式,并返回当前对象自身;
        stringBuilder.append(123);
        stringBuilder.append("abc");
        stringBuilder.append(true);
        StringBuilder stringBuilder1 = stringBuilder.append('s');
        StringBuilder stringBuilder2 = stringBuilder.append(12314.123);
        System.out.println(stringBuilder);
        System.out.println(stringBuilder1 == stringBuilder2); // 返回当前对象自身
        // 链式编程:如果一个方法返回得是一个对象,对象就可以继续向下调用方法
        stringBuilder2.append("连").append("式").append("编").append("程");
        System.out.println(stringBuilder);
        // result=> 123abctrues12314.123
        // result=> true
        // 123abctrues12314.123连式编程

        // public StringBuilder reverse() 返回相反的字符序列
        stringBuilder.reverse();
        System.out.println(stringBuilder);
        // 程编式连321.41321seurtcba321

        //public int length() 返回长度(字符出现的个数)
        System.out.println(stringBuilder.length());

        // public String toString():将当前StringBuilder对象转换为String对象
        System.out.println(stringBuilder.toString());
    }
}

StringBuilder和String得区别

  • String:内容是不可改变的
  • StringBuilder:内容是可变的

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| LongJL 发表于 2021-7-11 17:41
First丶云心 发表于 2021-7-11 17:25
谢谢分享,学习学习!

共同加油
chenlongjs 发表于 2021-7-11 19:16
 楼主| LongJL 发表于 2021-7-11 20:07
chenlongjs 发表于 2021-7-11 19:16
我怎么又感觉到我到了java的学习时代了?

  那就多看看,帮我查查错,顺便复习复习
mallorJava 发表于 2021-7-11 20:48
xuexi l
Derrick92 发表于 2021-7-12 08:04
咋没讲讲 线程安全呢?
 楼主| LongJL 发表于 2021-7-12 08:05
Derrick92 发表于 2021-7-12 08:04
咋没讲讲 线程安全呢?

线程安全我打算等到StringBuffer的时候一起说
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 00:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表