• StringBuffer


    StringBuffer类

    线程安全的编程字符序列

    StringBuffer和String的区别
    • String 是一个不可变的字符序列
    • StringBuffer是一个可变的字符序列
    StringBuffer的构造方法
    • public StringBuffer( ) : 无参构造方法
    • public StringBuffer(int capacity) : 指定容量的字符串缓冲区对象
    • public StringBuffer(String str) : 指定字符串内容缓冲区对象
    实例
    package com.mephisto.stringbuffer;
    
    public class DemoStringBuffer1 {
    	
    	public static void main(String[] args) {
    		StringBuffer stringBuffer = new StringBuffer();
    		System.out.println(stringBuffer.length());		// 容器的字符串个数, 实际值
    		System.out.println(stringBuffer.capacity());	// 容器的初始容量, 理论值
    		
    		
    		StringBuffer stringBuffer2 = new StringBuffer(10);
    		System.out.println(stringBuffer2.length());
    		System.out.println(stringBuffer2.capacity());
    
    		StringBuffer stringBuffer3 = new StringBuffer("Mephisto");
    		System.out.println(stringBuffer3.length());
    		System.out.println(stringBuffer3.capacity());
    		
    	}
    }
    
    
    输出结果
    0
    16
    0
    10
    8
    24
    
    StringBuffer的方法
    • public int capacity( ) : 返回当前容量 理论值
    • public int length( ) : 返回长度(字符数 ) 实际值
    StringBuffer的添加功能
    • public StringBuffer append(String str):
      • 可以把任意类型数据添加到字符串缓冲区里面,并返回缓冲区本身
    • public StringBuffer insert(int offset, String str):
      • 在指定位置吧任意类型的数据插入到字符串缓冲区里面, 并返回字符串缓冲区本身
    实例
    package com.mephisto.stringbuffer;
    
    public class DemoStringBuffer2 {
    
    	public static void main(String[] args) {
    		// demo1();
    		
    		StringBuffer sBuffer = new StringBuffer("1234");
    		// 在指定位置添加, 如果没有指定位置的索引就会报索引越界异常
    		sBuffer.insert(3, "Mephisto");	
    		System.out.println(sBuffer);
    	}
    
    	private static void demo1() {
    		/*
    		 * StringBuffer是字符串缓冲区, 当new的时候是在堆内存创建了一个对象,底层是一个长度为16的字符串数组
    		 * 当调用添加方法时, 不会再重新船舰对象,在不断向原缓冲区添加字符
    		 */
    		StringBuffer sBuffer = new StringBuffer();
    		StringBuffer sBuffer2 = sBuffer.append(true);
    		StringBuffer sBuffer3 = sBuffer.append("mephisto");
    		StringBuffer sBuffer4 = sBuffer.append(10);
    		
    		/* 四个引用指向同一个对象 */
    		System.out.println(sBuffer.toString());	
    		System.out.println(sBuffer2.toString());
    		System.out.println(sBuffer3.toString());
    		System.out.println(sBuffer4.toString());
    	}
    }
    
    
    StringBuffer的删除功能
    • public StringBuffer deleteCharAt(int index):
      • 删除指定位置的字符, 并返回本身
    • public StringBuffer delete(int start, int end):
      • 删除从指定位置开始指定位置结束的内容, 并返回本身
    实例
    package com.mephisto.stringbuffer;
    
    public class DemoStringBuffer3 {
    
    	public static void main(String[] args) {
    		StringBuffer sBuffer = new StringBuffer();
    		sBuffer.append("mephisto");
    		sBuffer.deleteCharAt(1);
    		
    		System.out.println(sBuffer);
    		
    		
    		// 删除的时候时包含头部,不包含尾部  0<=index<2, [0,2)
    		sBuffer.delete(0, 2);
    		System.out.println(sBuffer);
    		
    		//清空缓冲区
    		sBuffer.delete(0, sBuffer.length());
    		
    		// sBuffer = new StringBuffer();  不要用这种方式清空缓冲区, 这样是创建新的缓冲区, 原来的变成了垃圾,浪费内存
    		System.out.println("清空后: " + sBuffer);
    	}
    
    }
    
    输出结果
    mphisto
    histo
    清空后: 
    
    StringBuffer的替换和反转功能
    • StringBuffer替换功能
      • public StringBuffer repalce( int start, int end, String int ):
        • 从start 开始到 end 用 str 替换
    • StringBuffer的反转功能
      • public StringBuffer reverse( ):
        • 字符串反转
    实例
    package com.mephisto.stringbuffer;
    
    public class DemoStringBuffer4 {
    
    		public static void main(String[] args) {
    			StringBuffer sb = new StringBuffer("mephisto");
    			sb.replace(4, sb.length(), "1st0");
    			System.out.println(sb);
    			System.out.println(sb.reverse());
    		}
    }
    
    输出结果
    meph1st0
    0ts1hpem
    
    StringBuffer的截取功能
    • public String substring(int start):
      • 从制定位置街区到末尾
    • public String substring(int start, int end):
      • 截取从指定位置开始到结束位置,包括开始位置,不包括结束位置

    注意 : 返回值类型不再是StringBuffer本身

    实例
    package com.mephisto.stringbuffer;
    
    public class DemoStringBuffer {
    
    	public static void main(String[] args) {
    		int num = 1;
    		StringBuffer sBuffer = new StringBuffer("I like China!");
    		String string  = sBuffer.substring(4);
    		String string2 = sBuffer.substring(1,4);
    		
    		System.out.println(getType(num));
    		
    		System.out.println(getType(string));
    		
    		System.out.println(getType(string2));
    		
    		System.out.println(getType(sBuffer));
    	}
    	private static String getType(Object o) {
    		
    		return o.getClass().toString();
    	
    	}
    
    }
    
    输出结果
    class java.lang.Integer
    class java.lang.String
    class java.lang.String
    class java.lang.StringBuffer
    
    String --> StringBuffer转换
    • 通过构造方法
    • 通过append()方法
    StringBuffer --> String转换
    • 通过构造方法
    • 通过toString()方法
    • 通过subString(0,length);
    package com.mephisto.stringbuffer;
    
    public class DemoStringBuffer5 {
    	
    	public static void main(String[] args) {
    		
    		/* 通过构造方法  String --> StringBuffer */
    		StringBuffer sb1 = new StringBuffer("Mephisto");
    		System.out.println(sb1);
    		
    		
    		/* 通过append()方法   String --> StringBuffer */
    		
    		StringBuffer sb2 = new StringBuffer();
    		sb2.append("Mephisto");
    		System.out.println(sb2);
    		
    		
    		//	通过构造方法     StringBuffer --> String
    		StringBuffer sb3 = new StringBuffer("Mephisto");
    		
    		String string1 = new String(sb3);
    		System.out.println(string1);
    		
    		// 通过toString()方法  StringBuffer --> String
    		StringBuffer sb4 = new StringBuffer("Mephisto");
    		String string2 = sb4.toString();
    		System.out.println(string2);	
    		
    		// 通过subString(0,length);   StringBuffer --> String
    		StringBuffer sb5 = new StringBuffer("Mephisto");
    		String string3 = sb5.substring(0,sb5.length());
    		System.out.println(string3);
    	}
    
    }
    
    StringBuilder和StringBuffer区别

    StringBuilder是jdk1.0版本的, 是线程安全的, 效率低.

    StringBuffer是jdk1.5版本的, 是线程不安全的, 效率高.

    String 和 StringBuffer, StringBuilder的区别

    String是一个不可变的字符串序列

    StringBuffer, StringBuilder是可以变化字符序列

    形参问题
    • String作为参数传递
    • StringBuffer作为参数传递
    实例
    package com.mephisto.stringbuffer;
    
    public class DemoStringBuffer6 {
    
    	/*
    	 * String 作为参数传递
    	 * StringBuffer 作为参数传递
    	 * 
    	 * 基本数据类型的值传递, 不改变其值
    	 * 引用数据类型的值传递, 改变其值 
    	 * 
    	 * String类虽然是引用数据类型, 但是当作数据类型传递时和基本数据类型一样的
    	 * 
    	 * 
    	 */
    	
    	public static void main(String[] args) {
    
    		String string = "Mephisto";
    		System.out.println(string);
    		change(string);
    		System.out.println(string);
    		
    		StringBuffer sb = new StringBuffer();
    		sb.append("Mephisto");
    		System.out.println(sb);
    		change(sb);
    		System.out.println(sb);
    	}
    
    	public static void change(String string) {
    		string += " Lee";
    	}
    	public static void change(StringBuffer sb) {
    		sb.append(" Lee");
    	}
    
    }
    
    输出结果
    Mephisto
    Mephisto
    Mephisto
    Mephisto Lee
    
  • 相关阅读:
    Java--基础阶段--2Java基本语法-2.6数组
    Java--基础阶段--2Java基本语法-2.4运算符
    Java--基础阶段--2Java基本语法-2.3.5进制间转化
    Java--基础阶段--2Java基本语法-2.3.4原码/反码/补码
    Java--基础阶段--2Java基本语法-2.3.3ASCII码/Unicode编码/UTF-8
    Java--基础阶段--2Java基本语法-2.3.2整数/浮点/字符/布尔类型
    Java--基础阶段--2Java基本语法-2.3.1变量
    Java--基础阶段--2Java基本语法-2.2.2Java中的名称命名规范
    Java--基础阶段--2Java基本语法-2.2.1标识符
    Java--基础阶段--第4章: 面向对象编程(上)
  • 原文地址:https://www.cnblogs.com/mephisto03/p/9474634.html
Copyright © 2020-2023  润新知