StringBuilder类StringBuffer 类的由来?

在Java中使用String 类可以描述所有的字符串数据,但是String类的对象一旦创建,则该对象的字符序列 就不可更改,当需要更改字符串内容时,需要拷贝出来多个副本单独进行保存,因此对空间 和 时间 的消耗会比较大。

而StringBuilder类 和 StringBuffer 类 ,这两个类描述的字符序列可以直接更改。可以使用StringBuilder类 和 StringBuffer 类,来解决这样的问题。

StringBuilder类 和 StringBuffer 类的比较?

    StringBuffer类是早期存在的类,  支持线程同步/安全,  因此效率比较低;

StringBuilder类是后来增加的类,不支持线程同步/安全,因此效率比较高;


 一、StringBuilder类

1. 概述

java.lang.String 类由 final 修饰,表示该类不能被继承。

该类用于描述 可变的字符序列 , 不支持线程的同步 / 安全,因此效率比较高。

2. 常用方法

2.1构造方法:

StringBuilder()                             -使用无参的形式进行对象的构造,初始容量是16个字符。

StringBuilder(String  str)              -容量为16 + 字符串的长度

StringBuilder(int capacity)           - 根据参数指定的容量来构造该类的对象

2.2普通方法:

int     capacity( )         -返回调用对象的容量

int      length( )            -返回调用对象中字符的个数

StringBuilder   insert( int  offset, String str )         -用于将str 插入 到当前调用对象中 下标为offset的索引位置上,

StringBuilder  append( String str )                       -用于将str指向的字符串内容 追加 到当前字符串的末尾。

StringBuilder  delete( int start,  int end )             -用于 删除 字符串中  [start, end) 区间的子字符串内容

StringBuilder  replace (int start,  int end, String str )     -用于将当前字符串中  下标为[start, end) 区间的字符串内容 替换 成str

StringBuilder  reverse( )       -用于 反转字符序列

当插入的数据内容 没有超过 容量大小时,则容量不变;

当插入的数据内容 超   过     容量大小时,则容量变大;

代码:

package com.monkey1038;

public class StringBuilderTest {

    public static void main(String[] args) {

        // 使用参数指定的字符串内容来构造对象,容量应该为 字符串长度 +16
StringBuilder sb1 = new StringBuilder("hello"); // 打印字符串对象的容量
int cc = sb1.capacity();
System.out.println("\"hello\"的容量值 :"+cc); // 5+16=21 5:"hello"的长度
System.out.println(); // 打印字符串对象中字符的个数
int length = sb1.length();
System.out.println("\"hello\"的字符个数:"+length);
System.out.println(); // 思考:既然直接对字符串更改,为啥还要返回值呢?
// 返回值的目的是 为了能够进行多次连续调用
// sb1.insert(2, "12345").append("12345").delete(0, 1).reverse().toString().length(); // 向下标为2的位置,插入字符串“1234”
StringBuilder sb2 = sb1.insert(2, "1234");
System.out.println("向下标为2的位置,插入字符串“1234”: sb2= "+sb2);
System.out.println();
System.out.println("打印sb1= "+sb1);
System.out.println(); // 打印字符串对象的容量,当插入的数据没有超过容量时,则容量不变
// 当插入的数据内容超过容量范围时,容量变大
cc = sb1.capacity();
System.out.println("\"hello\"的容量:"+cc);
System.out.println(); // 打印字符串对象中字符的个数
System.out.println("\"hello\"字符个数: "+sb1.length());
System.out.println(); // 向字符串中下标为9的位置 插入"ABCD",插入到当前字符串的末尾
sb1.insert(9, "ABCD");
System.out.println("向字符串中下标为9的位置 插入\"ABCD\",插入到当前字符串的末尾: sb1= "+sb1);
System.out.println(); // 将字符串"world"追加到当前字符串的末尾
sb1.append("world");
System.out.println("将字符串\"world\"追加到当前字符串的末尾: sb1= "+sb1);
System.out.println(); // 将字符串中 "1234"删除掉
sb1.delete(2, 6); // [2,6)
System.out.println("将字符串中 \"1234\"删除掉: sb1= "+sb1);
System.out.println(); // 将字符串中"ABCD"替换成"abcd"
sb1.replace(5, 9, "abcd");
System.out.println("将字符串中\"ABCD\"替换成\"abcd\" sb1= "+sb1);
System.out.println(); // 实现字符串的反转
sb1.reverse();
System.out.println("实现字符串的反转: sb1= "+sb1);
} }

结果

"hello"的容量值 :21

"hello"的字符个数:5

向下标为2的位置,插入字符串“1234”:   sb2= he1234llo

打印sb1= he1234llo

"hello"的容量:21

"hello"字符个数: 9

向字符串中下标为9的位置 插入"ABCD",插入到当前字符串的末尾:    sb1= he1234lloABCD

将字符串"world"追加到当前字符串的末尾:    sb1= he1234lloABCDworld

将字符串中 "1234"删除掉:     sb1= helloABCDworld

将字符串中"ABCD"替换成"abcd"   sb1= helloabcdworld

实现字符串的反转:    sb1= dlrowdcbaolleh

二、StringBuffer 类


 思考: 既然直接对当前字符串更改即可,为何还需要有返回值?

返回值的目的是为了能够进行多次连续的调用。


StringBuilder / StringBuffer类的更多相关文章

  1. Java_String&StringBuilder&StringBuffer类

    目录 一.String类 二."==" 和 "equals"的区别 三.StringBuffer和StringBuilder 一.String类 String为 ...

  2. String、StringBuffer和StringBuilder,定义一个自己的StringBuilder的类

    String Java中的字符串值属于String类,虽然有其它方法表示字符串(如字符数组),但Java一般使用String类作为字符串的标准格式,Java编译器把字符串值作为String对象; St ...

  3. StringBuffer类 和 StringBuilder类

    上一篇中讲解了String类的用法.那么String有什么特点呢? 字符串特点:字符串是常量,其值在创建后就不能被修改.字符串的内容一旦发生变化,就会创建一个新的对象. 代码验证字符串特点: publ ...

  4. Java基础——数组应用之StringBuilder类和StringBuffer类

    接上文:Java基础——数组应用之字符串String类 一.StringBuffer类 StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和 ...

  5. java中String类、StringBuilder类和StringBuffer类详解

    本位转载自http://www.cnblogs.com/dolphin0520/p/3778589.html  版权声明如下: 作者:海子 出处:http://www.cnblogs.com/dolp ...

  6. String、StringBuilder和StringBuffer类

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  7. Java学习笔记20(String类应用、StringBuffer类、StringBuilder类)

    1.获取指定字符串中大小写和数字的个数: package demo; public class StringTest { public static void main(String[] args) ...

  8. 解析Java中的String、StringBuilder、StringBuffer类(一)

    引言 String 类及其相关的StringBuilder.StringBuffer 类在 Java 中的使用相当的多,在各个公司的面试中也是必不可少的.因此,在本周,我打算花费一些时间来认真的研读一 ...

  9. 13-01 java StringBuffer类,StringBuilder类

    StringBuffer类的构造方法 package cn.itcast_01; /* * 线程安全(多线程讲解) * 安全 -- 同步 -- 数据是安全的 * 不安全 -- 不同步 -- 效率高一些 ...

随机推荐

  1. 【机器学习】机器学习入门02 - 数据拆分与测试&算法评价与调整

    0. 前情回顾 上一周的文章中,我们通过kNN算法了解了机器学习的一些基本概念.我们自己实现了简单的kNN算法,体会了其过程.这一周,让我们继续机器学习的探索. 1. 数据集的拆分 上次的kNN算法介 ...

  2. matlab-变量类型-数组-矩阵

    1 变量类型 1.1基本 1.2 特殊变量 ans •i,j: complex number •Inf: 无穷大 •eps: 2.2204e-016 •NaN: not a number •pi:pa ...

  3. springcloud 使用RabbitMq

    新建一个项目,三个module 分别为eureka-server,config-server,config-client, eureka-server 的pom.xml, <?xml versi ...

  4. 深入浅出 Java Concurrency (19): 并发容器 part 4 并发队列与Queue简介[转]

    Queue是JDK 5以后引入的新的集合类,它属于Java Collections Framework的成员,在Collection集合中和List/Set是同一级别的接口.通常来讲Queue描述的是 ...

  5. redis教程(三)-----redis缓存雪崩、缓存穿透、缓存预热

    缓存雪崩 概念 缓存雪崩是由于原有缓存失效(过期),新缓存未到期间.所有请求都去查询数据库,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机.从而形成一系列连锁反应,造成整个系统崩溃. 解决 ...

  6. 阅读jeecms源码总结

    转载:https://blog.csdn.net/a382064640?t=1   Jeecsm使用框架包括:springMVC,HIbernate(数据持久层框架),Quartz(作业调度框架),a ...

  7. HTMl中常用标签

    文本标记语言,即HTML(Hypertext Markup Language),是用于描述网页文档的一种标记语言. HTML之所以称为超文本标记语言,是因为文本中包含了所谓“超级链接”点.所谓超级链接 ...

  8. c# 将Datarow转成Datarowview

    DataRowView rowview= dataTable.DefaultView.Cast<DataRowView>().Where(a => a.Row == tmprow). ...

  9. mysql导出数据库某些表的数据

    # 导出数据,一般从从库导出,减少主库的压力.mysqldump -hhostname -P3306 --single-transaction --master-data= database_name ...

  10. bzoj 1059 [ZJOI2007]矩阵游戏——匈牙利算法

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1059 发现不管怎么换,同一列的元素还是在同一列,同一行的元素还是在同一行. 所以必要条件是每 ...