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. 详解Promise.race()可以解决多个异步请求那个请求先返回

    Promise.race([]);接受一个参数,由promise组成的一个数组: 它的返回结果是promise对象: 它的结果和状态由什么去决定呢? 由第一个改变Promise状态的对象去决定:若是返 ...

  2. RC4加密技术探究:优缺点与实战应用

    引言 在网络安全领域,加密技术一直是保障数据安全的重要手段.Rivest Cipher 4(简称RC4)作为一种对称加密算法,自20世纪80年代以来广泛应用于各种网络安全协议中.本文将详细分析RC4加 ...

  3. TienChin 活动管理-搜索活动

    ActivityController @PreAuthorize("hasPermission('tienchin:activity:list')") @GetMapping(&q ...

  4. 知识图谱项目实战(一):瑞金医院MMC人工智能辅助构建知识图谱--初赛实体识别【1】

    1.技术背景&赛题介绍: A Labeled Chinese Dataset for Diabetes中文糖尿病标注数据集详情请见. 数据集链接:瑞金医院MMC人工智能辅助构建知识数据源:知识 ...

  5. 特定领域知识图谱融合方案:文本匹配算法之预训练Simbert、ERNIE-Gram单塔模型等诸多模型【三】

    特定领域知识图谱融合方案:文本匹配算法之预训练模型SimBert.ERNIE-Gram 文本匹配任务在自然语言处理中是非常重要的基础任务之一,一般研究两段文本之间的关系.有很多应用场景:如信息检索.问 ...

  6. 4.2 Inline Hook 挂钩技术

    InlineHook 是一种计算机安全编程技术,其原理是在计算机程序执行期间进行拦截.修改.增强现有函数功能.它使用钩子函数(也可以称为回调函数)来截获程序执行的各种事件,并在事件发生前或后进行自定义 ...

  7. 驱动开发:内核MDL读写进程内存

    MDL内存读写是最常用的一种读写模式,通常需要附加到指定进程空间内然后调用内存拷贝得到对端内存中的数据,在调用结束后再将其空间释放掉,通过这种方式实现内存读写操作,此种模式的读写操作也是最推荐使用的相 ...

  8. npm查看插件所有版本命令

    npm view webpack versions npm view webpack versions

  9. Kubernetes:kube-scheduler 源码分析

    0. 前言 [译] kubernetes:kube-scheduler 调度器代码结构概述 介绍了 kube-scheduler 的代码结构.本文围绕代码结构,从源码角度出发,分析 kube-sche ...

  10. FireDac 连接 SQL SERVER 2014 - LocalDB

    易博龙官方的文档没有更新,官方的文档只能连接local-db2012 微软官方关于local-db 2012的描述 如下: 但是现在我开始使用SQL SERVER LOCAL-DB 2014了,因为今 ...