1、概要

StringBuffer 其实就是一个存储字符的容器

字符串特点:字符串是常量;它们创建之后不能更改了
字符串一旦发生变化,那么立马创建一个新的对象。
注意:字符串的内容不适合频繁修改的,因为一旦修改马上就会创建一个新的对象但是需要重复修改字符串的内容,建议使用字符串缓冲类(stringBuffer)

笔试题目:使用StringBuffer无参构造器创建一个对象时,默认初始容量多少?如果长度不够使用,自动增长多少倍?
StringBuffer底层依赖字符数组才能存储字符数据,该字符串数组的默认初始容量是16,如果字符数组长度不够用自动增长1倍

2、StringBuffer 与 StringBuillder的区别

2.1、相同点
    1.两个类都是字符串缓冲类
    2.两个类的方法都是一样的
2.2、不同点
    1.StringBuffer是线程安全的,操作效率低,StringBuillder是非线程安全的,操作效率高.
    2.StringBuffer出现jdk1.0的,StringBuillder是jdk1.5的时候出现的
推荐使用:StringBuillder,因为操作效率高.

3、StringBuffer和String的区别

1、String对象是不可变的对象,当我们每次操作string都会重写新建对象来保存值
    2、StringBuffer对象一旦实例化,只对这一个对象操作

 package com.bw.string;

 public class Demo4 {
public static void main(String[] args) {
String str="abc";
StringBuffer sb=new StringBuffer("abc");
Runtime runtime=Runtime.getRuntime();
long startTime=System.currentTimeMillis();
long startfreeMemory=runtime.freeMemory();
for(int i=0;i<10000;i++){
//str+=i; //运行结果:操作耗时:492ms,内存消耗:8161KB
sb.append(i); //运行结果:操作耗时:10ms,内存消耗:147KB
//重新再运行的结果也是:StringBuffer的效率比String的高
}
long endfreeMemory=runtime.freeMemory();
long endTime=System.currentTimeMillis(); System.out.println("操作耗时:"+(endTime-startTime)+"ms,"+"内存消耗:"+(startfreeMemory-endfreeMemory)/1024+"KB");
}
}

4、StringBuffer下的常用方法(函数)

4.1、容器具备的行为

 4.1.1、增加
      append(boolean b) :可以添加任意类型的数据到容器中
      insert(int offset, boolean b):指定插入的索引值,插入对应的内容
 4.1.2、删除
     delete(int start, int end) :根据指定的开始与结束的索引值删除对应内容
     deleteCharAt(int index):根据指定的索引删除一个字符
 4.1.3、修改
     replace(int start, int end, String str) :根据开始和结束的两个索引值,替换对应的内容。
     reverse() :倒序
     setCharAt(int index, char ch) :根据指定的索引值,替换一个字符
     substring(int start, int end) :根据指定的开始和结束的索引值,来截取对应的字符串
     ensureCapacity(int minimumCapacity):确保容量至少等于规定的最小值        ensureCapacity的使用,在中间靠下的位置(第四点)
4.1.4、查看
     indexOf(String str) :返回指定子字符串第一次出现的字符串内的索引
     lastIndexOf(String str) :返回指定子字符串最右边(即最后)出现的字符串内的索引
     capacity() :返回当前容量          capacity()的使用详解
     length() :返回长度(字符数)
     charAt(int index) :返回指定索引值对应的(一个)字符
     toString():返回表示此顺序中的数据的字符串

5、例子

 package com.dhb.code;

 public class Demo6 {
public static void main(String[] args) {
//先使用StringBuffer无参构函数创建一个字符串缓冲类
StringBuffer sb=new StringBuffer(); /** 添加 */
sb.append("abcjavadefg").append("QWE");
sb.append(true);
System.out.println(sb); //运行结果:abcjavadefgQWEtrue
sb.insert(1,"sb.杨桃");
System.out.println(sb); //结果:asb.杨桃bcjavadefgQWEtrue /** 删除 */
sb.delete(1,3);
System.out.println(sb); //运行结果:a.杨桃bcjavadefgQWEtrue
sb.deleteCharAt(1);
System.out.println(sb);//结果:a杨桃bcjavadefgQWEtrue /** 修改 */
sb.replace(1, 4,"二狗子");
System.out.println(sb); //运行结果:a二狗子cjavadefgQWEtrue
sb.reverse();
System.out.println(sb); //结果:eurtEWQgfedavajc子狗二a
sb.setCharAt(1, '陈');
System.out.println(sb); //结果:e陈rtEWQgfedavajc子狗二a String s = sb.substring(16,19);
System.out.println(s);//结果:子狗二 /** 查看 */
int i = sb.indexOf("狗");
System.out.println("查看字符数组的长度:"+sb.length());//长度为20
System.out.println(i); //运行结果:17
System.out.println(sb.lastIndexOf("a")); //结果:19
System.out.println(sb.charAt(2));//结果:r
System.out.println(sb.capacity());//结果:34 默认容量是16,该字符数组的长度为20,20>16,所以容量增加了一倍,即:(当前容量+1)*2。 (16+1)*2=34
System.out.println(sb.toString());//结果:e陈rtEWQgfedavajc子狗二a
}
}

原创作者:DSHORE

作者主页:http://www.cnblogs.com/dshore123/

原文出自:http://www.cnblogs.com/dshore123/p/8968801.html

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

 
 
 
G
M
T
 
检测语言
世界语
中文简体
中文繁体
丹麦语
乌克兰语
乌兹别克语
乌尔都语
亚美尼亚语
伊博语
俄语
保加利亚语
僧伽罗语
克罗地亚语
冰岛语
加利西亚语
加泰罗尼亚语
匈牙利语
南非祖鲁语
卡纳达语
印地语
印尼巽他语
印尼爪哇语
印尼语
古吉拉特语
哈萨克语
土耳其语
塔吉克语
塞尔维亚语
塞索托语
威尔士语
孟加拉语
宿务语
尼泊尔语
巴斯克语
布尔语(南非荷兰语)
希伯来语
希腊语
德语
意大利语
意第绪语
拉丁语
拉脱维亚语
挪威语
捷克语
斯洛伐克语
斯洛文尼亚语
斯瓦希里语
旁遮普语
日语
格鲁吉亚语
毛利语
法语
波兰语
波斯尼亚语
波斯语
泰卢固语
泰米尔语
泰语
海地克里奥尔语
爱尔兰语
爱沙尼亚语
瑞典语
白俄罗斯语
立陶宛语
索马里语
约鲁巴语
缅甸语
罗马尼亚语
老挝语
芬兰语
苗语
英语
荷兰语
菲律宾语
葡萄牙语
蒙古语
西班牙语
豪萨语
越南语
阿塞拜疆语
阿尔巴尼亚语
阿拉伯语
韩语
马其顿语
马尔加什语
马拉地语
马拉雅拉姆语
马来语
马耳他语
高棉语
齐切瓦语
  世界语
中文简体
中文繁体
丹麦语
乌克兰语
乌兹别克语
乌尔都语
亚美尼亚语
伊博语
俄语
保加利亚语
僧伽罗语
克罗地亚语
冰岛语
加利西亚语
加泰罗尼亚语
匈牙利语
南非祖鲁语
卡纳达语
印地语
印尼巽他语
印尼爪哇语
印尼语
古吉拉特语
哈萨克语
土耳其语
塔吉克语
塞尔维亚语
塞索托语
威尔士语
孟加拉语
宿务语
尼泊尔语
巴斯克语
布尔语(南非荷兰语)
希伯来语
希腊语
德语
意大利语
意第绪语
拉丁语
拉脱维亚语
挪威语
捷克语
斯洛伐克语
斯洛文尼亚语
斯瓦希里语
旁遮普语
日语
格鲁吉亚语
毛利语
法语
波兰语
波斯尼亚语
波斯语
泰卢固语
泰米尔语
泰语
海地克里奥尔语
爱尔兰语
爱沙尼亚语
瑞典语
白俄罗斯语
立陶宛语
索马里语
约鲁巴语
缅甸语
罗马尼亚语
老挝语
芬兰语
苗语
英语
荷兰语
菲律宾语
葡萄牙语
蒙古语
西班牙语
豪萨语
越南语
阿塞拜疆语
阿尔巴尼亚语
阿拉伯语
韩语
马其顿语
马尔加什语
马拉地语
马拉雅拉姆语
马来语
马耳他语
高棉语
齐切瓦语
         
 
 
 
文本转语音功能仅限200个字符
 
  选项 : 历史 : 反馈 : Donate 关闭

java基础20 StringBuffer缓冲类的更多相关文章

  1. Java基础-日期格式化DateFormat类简介

    Java基础-日期格式化DateFormat类简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.DateFormat类概述 DateFormat 是日期/时间格式化子类的抽象 ...

  2. Java 基础 常用API (Object类,String类,StringBuffer类)

    Java API Java 的API(API: Application(应用) Programming(程序) Interface(接口)) Java API就是JDK中提供给我们使用的类,这些类将底 ...

  3. Java基础(四) StringBuffer、StringBuilder原理浅析

    StringBuilder与StringBuffer作用就是用来处理字符串,但String类本身也具备很多方法可以用来处理字符串,那么为什么还要引入这两个类呢? 关于String的讲解请看Java基础 ...

  4. JAVA基础第三章-类与对象、抽象类、接口

    业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...

  5. Java基础--常用API--集合类相关API

    一.泛型 1.泛型的本质是将类型参数化,即将数据类型作为参数. 2.泛型可以在编译期进行检查,其所有的强制转换是隐式且自动的,提高了代码的安全性. 3.泛型可以用在类(泛型类).接口(泛型接口).方法 ...

  6. Java基础语法(自定义类、ArrayList集合)

    Java基础语法 今日内容介绍 u 自定义类 u ArrayList集合 第1章 引用数据类型(类) 1.1 引用数据类型分类 提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类 ...

  7. java基础(二) -对象和类

    Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为.例如,一条狗是一 ...

  8. [ 转载 ] Java基础10--关于Object类下所有方法的简单解析

    关于Object类下所有方法的简单解析 类Object是类层次结构的根类,是每一个类的父类,所有的对象包括数组,String,Integer等包装类,所以了解Object是很有必要的,话不多说,我们直 ...

  9. Java之String,StringBuffer,StringBuilder类

    在 java 语言中, 用来处理字符串的的类常用的有 3 个: String.StringBuffer.StringBuilder. 它们的异同点: 1) 都是 final 类, 都不允许被继承; 2 ...

随机推荐

  1. 关于maven工程打jar的问题

    今天对maven做一些整理,更好的理了下思路: 这个篇博客介绍的还是很详细的: http://www.cnblogs.com/haippy/archive/2012/07/04/2576453.htm ...

  2. Chapter 4(栈与队列)

    1.栈的顺序存储结构 //*********************************stack_array.h************************************ #ifn ...

  3. UML类图与类间六种关系表示

    UML类图与类间六种关系表示 1.类与类图 类封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性,操作,关系的对象集合的总称. 类图是使用频率最高的UML图之一. 类图用于描述系统中所包含的 ...

  4. poj 3415 后缀数组 两个字符串中长度不小于 k 的公共子串的个数

    Common Substrings Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 11469   Accepted: 379 ...

  5. P4889 kls与flag

    P4889 kls与flag 一堆杆子, 每个有特定高度 \(a_{i}\) , 现想把杆子弄倒, 可以在一维内往左弄倒和往右弄倒, 求最大优秀对数, 定义优秀对数为两杆倒后顶点重合 Solution ...

  6. 《剑指offer》 面试题53 :正则表达式匹配 Java

    引言:这道题情况比较复杂,边界条件较多,为了便于以后复习,整理一下.另外,由于C语言和Java对于字符串的操作存在不一样的地方,代码也存在改动. 题目:请实现一个函数用来匹配包含'.'和'*'的正则表 ...

  7. mysql 复制表数据,表结构的3种方法

    什么时候我们会用到复制表?例如:我现在对一张表进行操作,但是怕误删数据,所以在同一个数据库中建一个表结构一样,表数据也一样的表,以作备份.如果用mysqldump比较麻烦,备份.MYD,.MYI这样的 ...

  8. 2018ICPC赛后总结

    南京: 南京是我们队第一场区域赛,而且和一队二队一起,心里总有种踏实感.之前我们仨在一起讨论过我们打大型比赛出现的问题,晨哥说我们在封榜后总是出不了题,确实是这样,我觉得在之前的比赛中,我们队胜负欲都 ...

  9. [USACO4.3]逢低吸纳Buy Low, Buy Lower

    https://daniu.luogu.org/problemnew/show/2687 求方案数: if(f[j]+1==f[i] && a[j]>a[i]) s[i]+=s[ ...

  10. 遇到can not resolve app 依赖包的问题

    1.第一种解决方式:build->sdkmannger->sdk tool ->安装android support responsitory和google responsitory ...