今天学习了的主要内容:
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
可以转载我的学习日记但请注明出处,谢谢。
本文章是本人学习笔记,不进行任何商用!也请别拿去商用!只为记录本人学习历程。
毕