常见对象·StringBuffer类

StringBuffer类概述

* A:StringBuffer类概述
  * 通过 JDk 提供的API,查看StringBuffer类的说明
  * 线程安全的可变字符序列,效率相对于StringBuilder 低

* B:StringBuffer 和 String的区别
  * String 是一个不可变的字符序列
  * StringBuffer 是一个可变的字符序列

StringBuffer类的构造方法

* A:StringBuffer 的构造方法:
  * public StringBuffer() :无参构造
  * public StringBuffer(int capacity) :指定容量的字符串缓冲区对象
  * public StringBuffer(String str) :指定字符串内容的字符串缓冲区对象

* B:StringBuffer的方法:
  * public int capacity() :返回当前容量 (理论值)
  * public int length() :返回长度 (字符数)

* C:案例演示:
  * 构造方法和长度方法的使用

package com.heima.stringbuffer;

public class Demo1_StringBuffer {

    public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
System.out.println(sb.length()); // 容器中的字符个数,实际值,初始为0
System.out.println(sb.capacity()); // 容器的初始容量,理论值,初始为16 StringBuffer sb2 = new StringBuffer(10); // 更改初始值
System.out.println(sb2.length());
System.out.println(sb2.capacity()); StringBuffer sb3 = new StringBuffer("heima");
System.out.println(sb3.length()); // 实际字符的个数
System.out.println(sb3.capacity()); // 字符串长度 + 初始容量
// 一般使用空参,只要满了,底层就会自动扩充
}
}

StringBuffer

StringBuffer的添加功能

* A:StringBuffer的添加功能
  * public StringBuffer apppend(String str) :
    * 可以把任意类型的数据添加到字符串缓冲区里面,并且返回字符串缓冲区本身
  * public StringBuffer insert(int offset, String str) :
    * 在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身

package com.heima.stringbuffer;

public class Demo2_StringBuffer {
/*
* StringBuffer时字符串缓冲区,当new的时候是在堆内存创建了一个对象,底层是一个长度为16的字符数组
* 当调用添加方法时,不会再重新创建对象,它不断向原缓冲区添加字符 如果再new的话,就又会创建新容器了
*
*/
public static void main(String[] args) {
// demo1();
demo2();
} public static void demo2() {
StringBuffer sb = new StringBuffer("123456");
sb.insert(3, "heima"); // 使"heima"成为第三个索引值,如果没有索引位置就会报错
System.out.println(sb);
} private static void demo1() {
StringBuffer sb = new StringBuffer();
StringBuffer sb2 = sb.append(true);
StringBuffer sb3 = sb.append("heima");
StringBuffer sb4 = sb.append(100);
// 4个引用实际上指向了同1个对象 System.out.println(sb); // 实际上打印时,调用了toString()方法,StringBuffer类中重写了该方法
System.out.println(sb2);
System.out.println(sb3);
System.out.println(sb4);
}
}

StringBuffer

StringBuffer的删除功能

* A:StringBuffer的删除功能:
  * public StringBuffer deleteCharAt(int index) :
    * 删除指定位置的字符,并且返回其本身
  * public StringBuffer delete(int start, int end) :
    * 删除从指定位置开始指定位置结束的内容,并且返回其本身

package com.heima.stringbuffer;

public class Demo3_StringBuffer {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
//sb.deleteCharAt(5); // 当缓冲区中这个索引上没有元素的时候就会报 java.lang.StringIndexOutOfBoundsException异常
sb.append("heima");
sb.deleteCharAt(4); // 根据索引删除掉索引位置上对应的字符
sb.delete(0, 2); // 删除指定范围内的字符串,包含头不包含为,前闭后开
sb.delete(0, sb.length()); // 清空缓冲区 //sb = new StringBuffer(); // 不要用这种方式清空缓冲区,原来的会变成垃圾
System.out.println(sb);
}
}

StringBuffer

StringBuffer的替换和反转功能

* A:StringBuffer的替换功能
  * public StringBuffer replace(int start, int end, String str) :
    * 从start开始到end用str替换

* B:StringBuffer的反转功能
  * public StringBuffer reverse() :
    * 字符串反转

package com.heima.stringbuffer;

public class Demo4_StringBuffer {

    public static void main(String[] args) {
StringBuffer sb = new StringBuffer("heima");
sb.replace(0, 3, "bai"); // 替换,包含头不包含尾,前闭后开
System.out.println(sb); sb.reverse(); // 反转
System.out.println(sb);
} }

StringBuffer

StringBuffer的截取功能及注意事项

* A:StringBuffer的截取功能
  * public String substring(int start) :
    * 从指定位置截取到末尾
  * public String substring(int start, int end) :
    * 截取从指定位置开始到结束,包括开始,不包括结束

* B:注意事项:
  * 返回值类型是String 而不是 StringBuffer

package com.heima.stringbuffer;

public class Demo5_StringBuffer {

    public static void main(String[] args) {
StringBuffer sb = new StringBuffer("woaiheima");
String str1 = sb.substring(4); // 类似字符串中的substring() 方法 System.out.println(str1);
System.out.println(sb); // sb并没有改变 String str2 = sb.substring(4, 7); // 包含头不包含尾
System.out.println(str2);
}
}

StringBuffer

StringBuffer和String的互相转换

* A:String -- StringBuffer
  * a:通过构造方法
  * b:通过append() 方法

* B:StringBuffer -- String
  * a:通过构造方法
  * b:通过toString() 方法
  * c:通过substring(0, length) 方法

package com.heima.stringbuffer;

public class Demo6_StringBufferMethod {
/*
* alt + shif + r ,给java文件改名
*/
public static void main(String[] args) {
// demo1(); // String 变 StringBuffer
// demo2(); // StringBuffer 变 String
} public static void demo2() {
StringBuffer sb = new StringBuffer("heima");
String s1 = new String(sb);// 通过构造方法将StringBuffer转换为String
System.out.println(s1); String s2 = s1.toString();
System.out.println(s2);// 通过toString方法将StringBuffer转换为String
// 一般用toString方法
String s3 = sb.substring(0);
System.out.println(s3);// 通过截取字符串将StringBuffer转换为String
} private static void demo1() {
StringBuffer sb1 = new StringBuffer("heima");
System.out.println(sb1);// 通过构造方法,将字符串转换为StringBuffer对象 StringBuffer sb2 = new StringBuffer();
sb2.append("heima");// 通过append将字符串转换为StringBuffer对象
System.out.println(sb2);
}
}

StringBuffer

把数组转换成字符串

* A:案例演示
  * 需求:把数组中的数据按照指定的格式拼接成一个字符串
  *
  *   举例:
       int[ ] arr = {1, 2, 3};

  *   输出结果:
       "[1, 2, 3]"

  *  用StringBuffer 的功能实现

package com.heima.test;

public class Test1 {

    public static void main(String[] args) {
int[] arr = { 1, 2, 3 };
System.out.println(arrayToString(arr));
}
/*
* 方法分析:
* 1、方法返回值类型为 String
* 2、参数列表 int[]
*/
public static String arrayToString(int[] arr) {
// 将数组转换为字符串,书写习惯,用2代替to
StringBuffer sb = new StringBuffer(); // 创建字符串缓冲区对象
sb.append("["); // 将[添加到缓冲区 for (int i = 0; i < arr.length; i++) { // 遍历数组
if (i == arr.length - 1) {
sb.append(arr[i]).append("]");
} else {
sb.append(arr[i]).append(", ");
}
}
return sb.toString(); }
}

Test1

字符串反转

* A:案例演示
  * 需求:把字符串反抓
  *
  *  举例:键盘输入abc
     输出结果:"cba"

  *  用StringBuffer的功能实现

package com.heima.test;

import java.util.Scanner;

public class Test2 {

    public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // 创建键盘录入对象
String line = sc.nextLine(); // 将键盘录入的字符串存储再line中 /*StringBuffer sb = new StringBuffer(line);//将字符串转换为StringBuffer对象
sb.reverse(); // 将缓冲区的内容反转
System.out.println(sb.toString());*/ line = stringReverse(line);
System.out.println(line); }
/*
* 方法分析:
* 1、返回值类型,String
* 2、参数列表 String line
*/
public static String stringReverse(String line) {
StringBuffer sb = new StringBuffer(line);
sb.reverse();
return sb.toString();
}
}

Test2

StringBuilder和StringBuffer的区别

* A:StringBuilder 的概述
  * 通过查看API了解一下StringBuilder类

* B:面试题
  * String, StringBuffer, StringBuilder 的区别

  * StringBuffer 和 StringBuilder 的区别
  * StringBuffer 是JDK1.0版本的,是线程安全的,效率低
  * StringBuilder 是JDK1.5版本的,是线程不安全的,效率高

  * String 和StringBuffer, StringBuilder 的区别
  * String 是一个不可变的字符序列
  * StringBuffer,StringBuilder 是可变的字符序列

String和StringBuffer分别作为参数传递

* A:形式参数问题
  * String作为参数传递
  * StringBuffer 作为参数传递

* B:案例演示
  * String 和 StringBuffer 分别作为参数传递的问题

package com.heima.stringbuffer;

public class Demo7_StringBuffer {
/*
* 基本数据类型的值传递,不改变其值
* 引用数据类型的值传递,改变其值
*/
public static void main(String[] args) {
String s = "heima";
System.out.println(s);
Change(s);
//string类虽然是引用数据类型,但是他当作参数传递时和基本数据类型是一样的,是按值传递
System.out.println(s);
System.out.println("-----------------");
StringBuffer sbBuffer = new StringBuffer(s);
System.out.println(sbBuffer);
Change(sbBuffer);
//StringBuffer类是传地址
System.out.println(sbBuffer);
} public static void Change(String s) {
s += "itcast";
} private static void Change(StringBuffer sbBuffer) {
sbBuffer.append("itcast");
} }

StringBuffer

Java 常见对象 03的更多相关文章

  1. Java常见对象Object类中的个别方法

    Java常见对象Object类 public int hashCode() : 返回该对象的哈希码值. 注意:哈希值是根据哈希算法计算出来的一个值,这个值和地址值有关,但是不是实际地址值.你可以理解成 ...

  2. Java 常见对象 05

    常见对象·正则表达式 和 其他类 正则表达式的概述和简单使用 * A:正则表达式 * 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串.其实就是一种规则,有自己的特殊应用 * 作用: ...

  3. Java 常见对象 02

    常见对象·String类 Scanner 的概述和方法介绍 * A:Scanner 的概述 * B:Scanner 的构造方法原理 * Scanner(InputStream source) * Sy ...

  4. Java 常见对象 04

    常见对象·Arrays 类和 包装类 数组高级冒泡排序原理图解 * A:画图演示 * 需求: 数组元素:{24, 69, 80, 57, 13} 请对数组元素进行排序 * 冒泡排序: 相邻元素两两比较 ...

  5. Java 常见对象 01

    常见对象·Object类 Object类的概述 * A:Object 类概述 * 类层次结构的根类 * 所有类都直接或间接地继承自该类 * B:构造方法 * public Object() * 回想为 ...

  6. Java常见对象之String

    String类的概述 String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现.字符串是常量,一旦被赋值,就不能被改变. String ...

  7. Java常见对象内存分析

    首先要明确Java内存的个位置上放的是啥 类.对象.实例三者的关系: 1.类:是对象的模板,可以实例化对象.(this不能出现在静态方法中) 2.对象:类的个体. 3.实例:实现的对象. 4.对应的引 ...

  8. day11<Java开发工具&常见对象>

    Java开发工具(常见开发工具介绍) Java开发工具(Eclipse中HelloWorld案例以及汉化) Java开发工具(Eclipse的视窗和视图概述) Java开发工具(Eclipse工作空间 ...

  9. 086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结

    086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结 本文知识点:面向对象基础(类和对象)总结 说明 ...

随机推荐

  1. java——继承、抽象方法

    基本上大量篇章都是为了解决重名造成的各种问题,如果所有名称都不会重名,那么其实不会有多大问题 父类与子类中的成员变量重名问题: 成员方法重名时如果调用方法: 继承中方法的覆盖重写: 继承中构造函数: ...

  2. 《软件建模与分析》——UML基本概念

    UML-基本概念 UML本质上是一种语言,语言的学习离不开基本的单词(元素)和语法(视图.模型)的学习,今天我们就从它们开始. 元素 类图中的关系 控制权限 继承 实现 依赖:一个类A使用到了另一个类 ...

  3. Dcoker命令使用详解

    Docker语法说明 docker [OPTIONS] COMMAND [arg...] OPTIONS --config=~/.docker :指定本地客户端配置文件. -D, --debug :开 ...

  4. 九种姿势运行Mimikatz

    https://www.freebuf.com/articles/web/176796.html

  5. Linux的IO调度程序

    Linux的IO调度机制浅析 现代计算机体系中,磁盘的速度和CPU的速度差距太大了,如果简单的将系统的IO请求按照请求的顺序进行顺序处理的话,系统的IO开销将导致系统的效率十分的低下,因此就需要将IO ...

  6. Spring Cloud Alibaba+Nacos搭建微服务架构

    1. Spring Cloud Alibaba 简介    Spring Cloud Alibaba是阿里巴巴为分布式应用提供的一站式解决方案,能够更方便快捷地搭建分布式平台,nacos拥有着替换eu ...

  7. vue 在有大数据量的 table 中使用弹窗 input 输入数据时卡顿解决方案

    vue 在有大数据量的 table 中使用弹窗 input 输入数据时卡顿解决方案 原因:vue在进行输入时,进行了多次的render刷新渲染操作,导致了input框输入时发生的卡顿现象 解决方法:在 ...

  8. 惠普机械键盘 K10GL 使用评测

    惠普机械键盘 GK100 使用评测 手感太差,不是 RGB 背光 惠普(HP) K10GL 机械键盘 有线 LED背光机械键盘 87键 混光青轴 refs https://item.jd.com/10 ...

  9. SwiftUI All In One

    SwiftUI All In One SwiftUI SwiftUI is an innovative, exceptionally simple way to build user interfac ...

  10. js data type checker

    js data type checker js 数据类型检测 "use strict"; /** * * @author xgqfrms * @license MIT * @cop ...