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. 20135239 益西拉姆 linux内核分析 读书笔记之第四章

    chapter 4 进程调度 4.1 多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统. 多任务系统可以划分为两类: - 非抢占式多任务: - 进程会一直执行直到自己主动停止运行(这一 ...

  2. Android O 正式版新功能

    ref: Android O新特性和行为变更总结zzhttp://www.cnblogs.com/bluestorm/p/7148134.html Android O正式版带来了诸多新功能,如Tens ...

  3. c/c++基本数据类型转换

    If either operand is of type long double, the other operand is converted to type long double. If the ...

  4. UESTC--1468

    题目:A Coin Problem 原题链接:http://acm.uestc.edu.cn/problem.php?pid=1468 分析:满足裴波纳契数列,打表找周期. #include<i ...

  5. HOJ 13101 The Triangle Division of the Convex Polygon(数论求卡特兰数(模不为素数))

    The Triangle Division of the Convex Polygon 题意:求 n 凸多边形可以有多少种方法分解成不相交的三角形,最后值模 m. 思路:卡特兰数的例子,只是模 m 让 ...

  6. Docker入门与应用系列(二)镜像管理

    1.1 什么是镜像 简单说,Docker镜像是一个不包含Linux内核而又精简的Linux操作系统. 1.2 镜像从哪里来 Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容 ...

  7. Python中hashlib模块

    介绍hashlib hashlib 是一个提供了一些流行的hash算法的 Python 标准库.其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512. ...

  8. day2 程序流程控制

    流程控制:1.调用方法.调用方法将导致控制流程离开当前方法,转移到被调用的方法 2.选择.java中有两种做出选择的机制:if/else语句和switch语句.三目运算符可以看作是if/else的一个 ...

  9. CF&&CC百套计划2 CodeChef December Challenge 2017 Chef and Hamming Distance of arrays

    https://www.codechef.com/DEC17/problems/CHEFHAM #include<cstdio> #include<cstring> #incl ...

  10. python 压缩每周生成的数据文件

    为了便于整理部分业务数据,以及存储管理, 写了此脚本.后期如果有需求,再改一下. #!/usr/bin/env python #coding:utf8 import os,sys,time,comma ...