package com.常用类;

import org.junit.Test;

/**
 * 关于package com.常用类;

import org.junit.Test;

/**
 * 关于StringBuffer和StringBuild的使用
 */

public class StringBufferBuilderTest {
    /*
    String和StringBuffer、StringBuild之间的转换
    String --->StringBuffer、StringBuild:调用StringBuffer、StringBuild的构造器
    StringBuffer、StringBuild--->String:1.调用String构造器
                                        2.StringBuffer、StringBuild的toString()
     */

/*
    对比三者的效率:
    从高到低排序:StringBuilder > StringBuffer > String
     */

/*
    StringBuffer的常用方法(StringBuilder同)

总结:
    增:append()
    删:delete(int start,int end)
    改:setCharAt(int n,char ch)/replace(int start,int end,String str)
    查:charAt(int n)
    插:insert(int offset,xxx)
    长度:length()
    遍历:for + charAt()
     */
    @Test
    public void test2(){
        StringBuffer s1 = new StringBuffer("abc");
        s1.append(1).append(2);//方法链
        s1.append('1');
        System.out.println(s1);
//        s1.delete(2,4);
//        s1.replace(2,4,"hello");
//        s1.insert(2,false);
//        s1.reverse();

String s2 = s1.substring(1, 3);//返回的是子字符串,不是原来的字符串,所以需要有个东西装着
        System.out.println(s1);
        System.out.println(s1.length());
        System.out.println(s2);
    }

/*
    String、StringBuffer、StringBuild三者的异同?
    String:不可变的字符序列;底层使用char[]储存
    StringBuffer:可变的字符序列:线程安全,效率低;底层使用char[]
    StringBuild:可变的字符序列:jdk5.0新增的,线程不安全的,效率高;底层使用char[]

源码分析:
    String str = new String();/ar[] value = new char[0];
    String str1 = new String("abc");/ar[] value = new char[]{'a','b','c'};

StringBuffer sb1 = new StringBuffer();/ar[] value = new char[16];相当于底层创建了一个长度是16的数组。
    sb1.append('a');/alue[0] = 'a';
    sb1.append('b');/alue[1] = 'b';

StringBuffer sb2 = new StringBuffer("abc");/ar[] value = new char["abc".length() + 16];

问题1:System.out.println(sb2.length());//3
    问题2:扩容问题:如果要添加的数据底层数组撑不下了,那就需要扩容底层的数组。
            默认情况下,扩容为原来容量的2倍+2,同时将原有数组中的元素复制到新的数组中。

指导意义:开发中建议大家使用:StringBuffer(int capacity)或StringBuilder(int capacity)
     */

@Test
    public void test(){
        StringBuffer sb1 = new StringBuffer("abc");
        sb1.setCharAt(0,'m');
        System.out.println(sb1);

StringBuffer sb2 = new StringBuffer();
        System.out.println(sb2.length());//0   value.length()=16
    }
}

*/

public class StringBufferBuilderTest {
    /*
    String和StringBuffer、StringBuild之间的转换
    String --->StringBuffer、StringBuild:调用StringBuffer、StringBuild的构造器
    StringBuffer、StringBuild--->String:1.调用String构造器
                                        2.StringBuffer、StringBuild的toString()
     */

/*
    对比三者的效率:
    从高到低排序:StringBuilder > StringBuffer > String
     */

/*
    StringBuffer的常用方法(StringBuilder同)

总结:
    增:append()
    删:delete(int start,int end)
    改:setCharAt(int n,char ch)/replace(int start,int end,String str)
    查:charAt(int n)
    插:insert(int offset,xxx)
    长度:length()
    遍历:for + charAt()
     */
    @Test
    public void test2(){
        StringBuffer s1 = new StringBuffer("abc");
        s1.append(1).append(2);//方法链
        s1.append('1');
        System.out.println(s1);
//        s1.delete(2,4);
//        s1.replace(2,4,"hello");
//        s1.insert(2,false);
//        s1.reverse();

String s2 = s1.substring(1, 3);//返回的是子字符串,不是原来的字符串,所以需要有个东西装着
        System.out.println(s1);
        System.out.println(s1.length());
        System.out.println(s2);
    }

/*
    String、StringBuffer、StringBuild三者的异同?
    String:不可变的字符序列;底层使用char[]储存
    StringBuffer:可变的字符序列:线程安全,效率低;底层使用char[]
    StringBuild:可变的字符序列:jdk5.0新增的,线程不安全的,效率高;底层使用char[]

源码分析:
    String str = new String();/ar[] value = new char[0];
    String str1 = new String("abc");/ar[] value = new char[]{'a','b','c'};

StringBuffer sb1 = new StringBuffer();/ar[] value = new char[16];相当于底层创建了一个长度是16的数组。
    sb1.append('a');/alue[0] = 'a';
    sb1.append('b');/alue[1] = 'b';

StringBuffer sb2 = new StringBuffer("abc");/ar[] value = new char["abc".length() + 16];

问题1:System.out.println(sb2.length());//3
    问题2:扩容问题:如果要添加的数据底层数组撑不下了,那就需要扩容底层的数组。
            默认情况下,扩容为原来容量的2倍+2,同时将原有数组中的元素复制到新的数组中。

指导意义:开发中建议大家使用:StringBuffer(int capacity)或StringBuilder(int capacity)
     */

@Test
    public void test(){
        StringBuffer sb1 = new StringBuffer("abc");
        sb1.setCharAt(0,'m');
        System.out.println(sb1);

StringBuffer sb2 = new StringBuffer();
        System.out.println(sb2.length());//0   value.length()=16
    }
}

StringBuffer和StringBuild的使用相关推荐

  1. StringBuffer和StringBuild

    StringBuffer和StringBuild两个类的区别主要是: StringBuffer JDK1.0提供的类,线程安全,做线程同步检查,效率较低. StringBuild JDK1.5提供的类 ...

  2. java 字符串处理流程_一文带你了解Java字符串处理(String,StringBuffer,StringBuild)...

    前言本文篇幅较长,但都是满满的干货,请大家耐心观看,相信会有不小的收获.本人在总结的过程中也收获了很多的知识,也希望大家可以一起借鉴学习下,希望大家最后都能有所收获! 再言字符串的分类在java.la ...

  3. c++ string取子串_一文教你Java字符串处理(String,StringBuffer,StringBuild)

    前言 本文篇幅较长,但都是满满的干货,请大家耐心观看,相信会有不小的收获.本人在总结的过程中也收获了很多的知识,也希望大家可以一起借鉴学习下,希望大家最后都能有所收获! 再言 字符串的分类在java. ...

  4. c++string 加引号_一文带你了解Java字符串处理(String,StringBuffer,StringBuild)

    前言 本文篇幅较长,但都是满满的干货,请大家耐心观看,相信会有不小的收获.本人在总结的过程中也收获了很多的知识,也希望大家可以一起借鉴学习下,希望大家最后都能有所收获! 再言 字符串的分类在java. ...

  5. Java基础篇——字符串处理(String,StringBuffer,StringBuild)

    提前说明本次的文章很长但是很有用,有耐心看完的必定不是凡人,必定会有很大的收获.本人在总结的过程中也收获了很多的知识,希望我们可以一起学习.写下这篇文章完全是抱着可以帮助到他人的态度. 虽然要写出很高 ...

  6. StringBuilder StringBuffer 如何清空

    StringBuilder StringBuffer面试题一般会问两者的区别和String的区别. StringBuffer线程安全的,StringBuild线程不安全的, String的区别是Str ...

  7. String和StringBuffer、StringBuile区别

    一.String常见方法 String t1 = "Aj,sdh";String t2 = "gfdgs";System.out.println(t1.equa ...

  8. java后端经验和技术总结(1)

    1.在这几年里走过一些弯路,也碰到一些难题,也受到过做为一名开发却经常为系统维护和发布当救火队员的苦恼.遂决定梳理一下自己所学到过的东西,为大家分享一下.  经过几年意识到以前也有很多认识误区,比如: ...

  9. @override怎么加上去_不知道怎么学?java后端5年经验和技术总结(附思维导图)

    1.引言 今天的光棍节,经历了昨晚的疯狂之后,看着后台数据逐渐的趋于平稳,突然感觉身心疲惫,躺在椅子上,看着媳妇给我发的消息,同学群里在疯狂讨论昨晚的疯狂操作,身边的年轻人换了一批又一批,回想自己,毕 ...

最新文章

  1. 矢量合成和分解的法则_高考复习整理力的合成和分解
  2. MSD3458开发资料
  3. 1、LeetCode784 字母大小写全排列
  4. jq添加新节点赋予class属性并获取该对象
  5. 2013\National _C_C++_A\4.约数倍数选卡片
  6. JavaScript面向对象——深入理解默认的继承方式原型链
  7. 转:【总结】浏览器CSS Hacks汇总,浏览器兼容方式CSS Hacks
  8. 如果人民币贬值,对股市会有什么影响?
  9. .NET 云原生架构师训练营(模块二 基础巩固 配置)--学习笔记
  10. 普通树与二叉树的相互转化及哈夫曼树的了解
  11. java 字符流 utf8,JAVA基础(字符流设置编码读写字符)
  12. c语言序列化后只有四位小数,《C编程.高级C》4.序列化
  13. 53. Maximum Subarray 题解
  14. 群晖服务器自动同步到本地电脑,安装群晖Drive,实现多台电脑文件同步
  15. [SQL面试经验] 经典sql面试题及答案第1期
  16. 数字信号处理(DSP)实验——IIR数字滤波器设计与仿真
  17. 用命令行建立空白的simulink模型(mdl文件)(Matlab)
  18. python pip工具安装教程
  19. c# pdf转html,C# 将PDF转为Word、Html、XPS、SVG、PCL、PS——基于Spire.Cloud.PDF
  20. AJAX,Axio异步框架(对原生AJAX封装)。web分区

热门文章

  1. http请求工具类 含是否代理 及设置代理地址及端口
  2. NGSIM数据集解析(含代码)
  3. 1795C Tea Tasting
  4. linux环境变量配置的方法,linux 设置环境变量方法是怎样的?Linux环境变量配置注意事项是什么?...
  5. 百度小程序调研微信转百度
  6. 电子商务信用如何提高?
  7. 初探技术管理(5)-管理沟通
  8. java nonnull_java – “如果函数返回非null,则为NonNull”?
  9. web导入excel(利用POI解析)
  10. Hadoop安装及遇到问题解决——1.安装