JAVA学习日记: String-StringBuffer-StringBuilder(2)

今天学习了的主要内容:

1.String
2.StringBuffer
3.StringBuilder

String:

	String类被final关键字修饰,意味着它不能被继承。

	String的对象代表一组不可以改变的Unicode字符,意味着被初始化后就更改不了了。

	修改String对象的内容实际是又开辟了一个空间进行修改操作,然后修改完成后产生一个新的字符串。这就导致在多次对字符串进行拼接操作时效率会低一些。

StringBuffer:

		StringBuffer对象代表着一组可以改变的Unicode字符
 
  		用StringBuffer来操作字符串可以动态操作,不会生成过多对象。
  
 		所以它的方法许多是被synchronized关键字修饰的同步方法。所以效率比StringBuffer要低一些。
  		StringBuffer由于是线程安全的,所以比StringBuilder的效率稍微低一些。
  		
  		对象创建:
  			StringBuffer name = new StringBuffer();
  			初始化一个不带字符的字符串缓冲区,其默认的初始容量为16个字符。
  
  			StringBuffer name = new StringBuffer(int capacity);capacity:容量
  			初始化一个不带字符的字符串缓冲区,由capacity决定初始容量。
  
  			StringBuffer name = new StringBuffer(String value);
  			初始化带字符串的缓冲区,内容初始化为value传入的字符串的内容。
  
 		常用方法:
  			int capacity();得到当前容量大小。
  			int length();得到字符串中字符的个数。
  			StringBuilder reverse();将当前字符串序列转化成其反转形式。
  			void setCharAt(int index, char ch);更改当前字符串中第index个位置上的字符的值为ch。
  			StringBuilder delete(int start, int end);移除start位置开始到end位置之前中间这一段当前字符串的子字符串的内容。
  			char charAt(int index);得到当前第index个位置上的字符的值。
  			String toString();重写过后是将StringBuilder类的对象转换成String类的对象。
  
 		追加字符串的方法:
  			StringBuffer append(String str);//追加字符串。
 			StringBuffer append(int num);//追加int参数的字符串。
  			StringBuffer append(Object o);//追加Object参数的字符串。
  			StringBuffer insert(int index, String str);//指定位置插入字符串。	
  			StringBuffer insert(int index, char ch);//指定位置插入字符。
  			StringBuffer insert(int index, Object o));//指定位置插Object参数的字符串。
  				
  			想要判断两个StringBuffer对象的内容是否相等的时候要先用toString()方法
  			把他俩转换成String对象之后才能比较。

StringBuilder:

		对象创建:
  			他是在JDK5.0之后为了简易替换StringBuffer类儿制作的一个类。
  			他一般被用于单个线程使用字符串缓冲区的时候。
  			
  			构造函数方法和StringBuffer的除了类名不一样其他一样。
  
 			想要判断两个StringBuilder对象的内容是否相等的时候要先用toString()方法
  			把他俩转换成String对象之后才能比较。
			
			其中方法与StringBuffer相差不多区别在于StringBuilder类的方法不是同步方法
			即没被synchronized关键字修饰。

StringBufferTestDemo02类(测试三种不同的类):

package LessonForString02;

class Game
{
    
    
	private String gamename;
	
	public Game(String name)
	{
    
    
		this.gamename = name;
	}
	
	@Override
	public String toString()
	{
    
    
		return this.gamename;
	}
}
public class StringBufferTestDemo01
{
    
    
	public static void main(String[] args) 
	{
    
    
		System.out.println("--------StringBuffer--------");
		
		StringBuffer bf1 = new StringBuffer();
		System.out.println("bf1此时的缓冲区容量:" + bf1.capacity() + "\tbf1此时包含的字符串的长度:" + bf1.length());
		
		StringBuffer bf2 = new StringBuffer(20);
		System.out.println("bf2此时的缓冲区容量:" + bf2.capacity() + "\tbf2此时包含的字符串的长度:" + bf2.length());
		
		StringBuffer bf3 = new StringBuffer("Hello World!");
		System.out.println("bf2此时的缓冲区容量:" + bf3.capacity() + "\tbf2此时包含的字符串的长度:" + bf3.length());
		//此时的缓冲区的初始长度是默认16加上传入的字符的长度的。此时为28。
		
		System.out.println("--------StringBuilder--------");
		
		StringBuilder bd1 = new StringBuilder();
		System.out.println("bd1此时的缓冲区容量:" + bd1.capacity() + "\tbd1此时包含的字符串的长度:" + bd1.length());
		
		StringBuilder bd2 = new StringBuilder(20);
		System.out.println("bd2此时的缓冲区容量:" + bd2.capacity() + "\tbd1此时包含的字符串的长度:" + bd2.length());
		
		StringBuilder bd3 = new StringBuilder("Hello World!");
		System.out.println("bd1此时的缓冲区容量:" + bd3.capacity() + "\tbd1此时包含的字符串的长度:" + bd3.length());
		
		System.out.println("--------StringBuffer's common method--------");
		
		StringBuffer bf4 = new StringBuffer("ZLM ALWAYS BE GOD!");
		System.out.println("bf4这个StringBuffer对象中初始化字符串倒着写的字符串为:" + bf4.reverse()); 
		
		bf4.setCharAt(3, 'z');
		System.out.println("bf4这个StringBuffer对象中替换字符:" + bf4.toString());
		
		bf4.delete(1, 3);
		System.out.println("bf4这个StringBuffer对象1~3个字符:" + bf4.toString());
		
		System.out.println("bf4这个StringBuffer对象第3位上的字符:" + bf4.charAt(3));
		
		System.out.println("将字符串追加到bf4中:" + bf4.append("ASDASD"));
		System.out.println("将数字追加到bf4中:" + bf4.append(123456));
		System.out.println("将Game对象追加到bf4中:" + bf4.append(new Game("Mario")).toString());
		
		System.out.println("--------StringBuffer compared--------");
		
		StringBuffer bf5 = new StringBuffer("ZLM");
		StringBuffer bf6 = new StringBuffer("ZLM");
		
		boolean b1 = bf5.equals(bf6);
		boolean b2 = bf5.toString().equals(bf6.toString());
		
		System.out.println("没用toString()方法之前:" + b1);
		System.out.println("用toString()方法之后:" + b2);
	}
}

本篇部分文字来源于:
	咕嘟咖啡杨海滨老师 — 《java编程语言高级特性》
	在这里十分感谢老师能够给我带来学习的激情。

2020.10.27
可以转载我的学习日记但请注明出处,谢谢。
本文章是本人学习笔记,不进行任何商用!也请别拿去商用!只为记录本人学习历程。
毕	

猜你喜欢

转载自blog.csdn.net/SIESTA030/article/details/109320364