1 package com.bytezero.stringclass;
2
3 import org.junit.Test;
4
5 /**
6 * 关于 StringBuffer 和 StringBuilder的使用
7 *
8 *
9 *
10 *
11 * @author Bytezero1·zhenglei! Email:420498246@qq.com
12 * create 2021-10-22 17:57
13 */
14 public class StringBufferBuildeTest {
15 /*
16
17 对比String,StringBuffer,StringBuilder三者的效率:
18 从高到底排列:StringBuilder > StringBuffer > String
19 */
20
21
22
23 /*
24
25 StringBuffer的常用方法
26 StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接
27 StringBuffer delete(int start,int end):删除指定位置的内容
28 StringBuffer replace(int start,int end,String str): 把[start,end]位置替换为str
29 StringBuffer insert(int offset,xxx):在指定位置插入xxx
30 StringBuffer reverse(): 把当前字符序列逆转
31
32 public int indexOf(String str)
33 public String subString(int start,int end)
34 public int Length()
35 public char charAt(int n)
36 public void setCharAt(int n,char ch)
37
38 总结:
39 增 : append(xxx)
40 删 delete(int start,int end)
41 改 setCharAt(int n,char ch)
42 查 charAt(int n)
43 插 insert(int offset,xxx)
44 长度 Length()
45 遍历 for + charAt(); / toString
46
47
48 */
49 @Test
50 public void test2(){
51
52 StringBuffer s1 = new StringBuffer("abc");
53 s1.append(1);
54 s1.append('1');
55 System.out.println(s1); //abc11
56
57 // s1.delete(2,4); //ab1
58 // s1.replace(2,4,"zhenglei"); //abzhenglei1
59 // s1.insert(2,false);
60
61 // s1.reverse(); //11cba
62 String s2 = s1.substring(1, 3);
63 System.out.println(s2); //bc
64
65 System.out.println(s1); //abfalsec11
66 System.out.println(s1.length());
67
68
69 }
70
71
72
73
74 /*
75 String,StringBuffer,StringBuilder三者的异同?
76
77 String: 不可变的字符序列 底层使用char[]存储
78 StringBuffer:可变的字符序列; 线程安全,效率低 底层使用char[]存储
79 StringBuilder:可变的字符序列 jdk 5.0 效率高 线程不安全 底层使用char[]存储
80
81 源码分析:
82 String str = new String(); //char[] value = new char[0];
83 String str1 = new String("abc"); //char[] value = new char[]{'a','b','c'};
84
85 StringBuffer sb1 = new StringBuffer(); //char[] value = new char[16];底层创建了一个长度是16的数组
86 System.out.println(sb2.length()); //0
87 sb1.append('a'); //value[0] = 'a'
88 sb1.append('b'); //value[1] = 'b'
89
90 StringBuffer sb2 = new StringBuffer("abc"); //char[] value = new char["abc".length()+16];
91
92 //问题一 System.out.println(sb2.length()); //3
93 //问题二 扩容问题:如果要添加的数据底层数组盛不下了,那就需要扩容底层的数组
94 默认情况下,扩容为原来容量的 2 倍 + 2,同时将原有的数组中的元素复制到新的数组中
95
96 开发中 建议大家使用:StringBuffer(int capacity) 或StringBuid(int capacity)
97
98
99
100
101 注意:作为参数传递的话,方法内部String不会改变其值,StringBuffer和StringBuilder
102 会改变其值
103
104
105 */
106
107 @Test
108 public void test1(){
109
110 StringBuffer sb1 = new StringBuffer("abc");
111 sb1.setCharAt(0,'m');
112 System.out.println(sb1); //mbc
113
114 StringBuffer sb2 = new StringBuffer();
115 System.out.println(sb2.length()); //0
116
117 StringBuffer sb3 = new StringBuffer("abc");
118 System.out.println(sb3.length()); //3
119
120 StringBuffer s3 = new StringBuffer(20);
121
122
123
124 }
125 }

Java 常用类 于 StringBuffer 和 StringBuilder的使用 + String三者的异同的更多相关文章

  1. java 数据结构(二):java常用类 二 StringBuffer、StringBuilder

    1.String.StringBuffer.StringBuilder三者的对比String:不可变的字符序列:底层使用char[]存储StringBuffer:可变的字符序列:线程安全的,效率低:底 ...

  2. 【Java常用类】StringBuffer、StringBuilder

    Stringbuffer.StringBuilder String.StringBuffer.StringBuilder三者的异同? String:不可变的字符序列:底层使用char[]存储 Stri ...

  3. JDK常用类解读--StringBuffer、StringBuilder

    上一篇博客讲到String对象一旦被创建该内容就不能被修改了如: String s = "hello world"; s.substring(6); s.replace(" ...

  4. Java常用类之StringBuffer

    StringBuffer 类: 1. java.lang.StringBuffer 代表可变的字符序列: 2. StringBuffer 和 String 类似,但是 StringBuffer 可以对 ...

  5. Java——常用类(StringBuffer)

    [StringBuffer]   <1>java.lang.StringBuffer代表可变的字符序列. <2>StringBuffer和String类似,但是StringBu ...

  6. JAVASE(十二) Java常用类: 包装类、String类、StringBuffer类、时间日期API、其他类

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.包装类 1 .1 八个包装类 ​ 1. 2 基本数据类型,包装类,String者之间的转换 ​ 2. ...

  7. Java基础 —— Java常用类

    Java常用类: java.lang包: java.lang.Object类: hashcode()方法:返回一段整型的哈希码,代表地址. toString()方法:返回父类名+"@&quo ...

  8. Java常用类学习笔记总结

    Java常用类 java.lang.String类的使用 1.概述 String:字符串,使用一对""引起来表示. 1.String声明为final的,不可被继承 2.String ...

  9. Java 常用类总结(SE基础)

    本篇博客对java常用类相关知识进行了归纳总结,比较详细,适用于学习和复习. 1. 字符串相关的类 1.1 String String是一个final类,代表不可变的字符序列.不可被继承. Strin ...

  10. Java常用类,这一次帮你总结好!

    常用类 常用类概述: 内部类 Object类 包装类 数学类 时间类 字符串 String Builder和StringBuffer DecimalFormat 一.内部类 概念:在一个类内部再定义一 ...

随机推荐

  1. 解决Edge浏览器提示“此网站已被人举报不安全”

    今天下午微软旗下的 Microsoft Edge 浏览器将百度搜索的跳转域名 (*.baidu.com/link?url=*) 封杀,百度搜索首页可以打开,但搜索任何关键词点击搜索结果都会被拦截. 当 ...

  2. 2.1 Windows驱动开发:内核链表与结构体

    在Windows内核中,为了实现高效的数据结构操作,通常会使用链表和结构体相结合的方式进行数据存储和操作.内核提供了一个专门用于链表操作的数据结构LIST_ENTRY,可以用来描述一个链表中的每一个节 ...

  3. 8.3 NtGlobalFlag

    NtGlobalFlag 是一个Windows内核全局标记,在Windows调试方案中经常用到.这个标记定义了一组系统的调试参数,包括启用或禁用调试技术的开关.造成崩溃的错误代码和处理方式等等.通过改 ...

  4. Flask 框架:实现简单API测试接口

    通过使用Python中Flask框架实现一个简单的API接口程序,用户可发送JSON格式的请求,服务器响应请求,并以JSON格式将数据返回给用户,此处代码是一个模板可以测试接口时使用. Flask代码 ...

  5. ROS节点通信(一)消息发布和订阅

    目录 1.说明 2.创建工作空间 3.创建功能包 4.编写自定义传输类型文件 5.编写源代码 5.1.编写发布者代码 5.2.编写订阅者代码 6.编译 7.启动运行 8.查看ROS网络结构图 1.说明 ...

  6. 痞子衡嵌入式:我入选了2023年度与非网(eefocus)最佳创作者Top15

    最近收到了「与非网」发来的 2023 年度最佳创作者 证书,证书做得一如既往地有质感,这是与非网第二次给痞子衡发证书了,足见与非网对痞子衡的认可. 与非网自 2021 年起,每年都会评选一次年度创作者 ...

  7. Java并发(八)----使用线程避免cpu占用100%

    1.sleep 实现 在没有利用 cpu 来计算时,不要让 while(true) 空转浪费 cpu,这时可以使用 yield 或 sleep 来让出 cpu 的使用权给其他程序 while(true ...

  8. .NET 云原生架构师训练营(模块二 基础巩固 MVC终结点)--学习笔记

    2.3.4 Web API -- MVC终结点 MVC与MVVM 模型绑定 自定义模型绑定器 模型验证 返回数据处理 MVC与MVVM MVC ASP.NET Core MVC 概述:https:// ...

  9. NC227595 跳跳跳

    题目链接 题目 题目描述 dd在玩跳格子游戏,具体游戏规则如下, \(n\) 个格子呈环形分布,顺时针方向分别标号为 \(1\sim n\) ,其中 \(1\) 和 \(n\) 相邻,每个格子上都有一 ...

  10. 从零开始手写缓存框架(二)redis expire 过期原理及实现

    前言 我们在 从零手写 cache 框架(一)实现固定大小的缓存 中已经初步实现了我们的 cache. 本节,让我们来一起学习一下如何实现类似 redis 中的 expire 过期功能. 过期是一个非 ...