1、线程安全的
2、安全,代表着有同步操作出现,数据是安全的,效率不高
3、不安全,不同步,效率高
4、安全问题和效率问题一直都是头疼的问题
5、生活中哪些是线程安全的案例:
线程安全:银行的一些业务,售票,医院取号。。
不是安全问题的,效率高的:博客,视频会员。。
public final class StringBuffer
线程安全,可变的字符序列。
字符串缓冲区就像一个String ,但可以修改。
在任何时间点,它包含一些特定的字符序列,
但可以通过某些方法调用来更改序列的长度和内容。
简单记忆:它就是一个线程安全的可变字符串
StringBuffer和String的区别?
1、前者的长度和内容都是可变的,后者都不可变
2、前者可以提前给出一个缓冲区,可以进行字符串的拼接,而不会重新开辟新的空间
后者,每创建新的字符串都会开辟新的空间
StringBuffer的构造方法:
StringBuffer() 构造一个没有字符的字符串缓冲区,初始容量为16个字符。
StringBuffer(int capacity) 构造一个没有字符的字符串缓冲区和指定的初始容量。
StringBuffer(String str) 构造一个初始化为指定字符串内容的字符串缓冲区。
StringBuffer的方法:
public int capacity() 返回当前容量。
容量是新插入字符可用的存储量,超过此值将进行分配。
public int length() 返回长度(字符数)。
public class StringBufferDemo1 {
public static void main(String[] args) {
// StringBuffer() 构造一个没有字符的字符串缓冲区,初始容量为16个字符。
StringBuffer sb =new StringBuffer();
int c =sb.capacity();
System.out.println(c);
//StringBuffer(int capacity) 构造一个没有字符的字符串缓冲区和指定的初始容量。
StringBuffer sb1 =new StringBuffer(50);
int c1 =sb1.capacity();
System.out.println(c1);
//StringBuffer(String str) 构造一个初始化为指定字符串内容的字符串缓冲区。插入
StringBuffer sb2 =new StringBuffer("hhhh");
System.out.println(sb2);
int c2 =sb2.capacity();
System.out.println(c2);
}
}
StringBuffer:
添加功能
public StringBuffer append(String str)
可以把任意类型的数据添加到字符串缓冲区中
返回的是当前字符串缓冲区本身
public class StringBufferDemo2 {
public static void main(String[] args) {
StringBuffer sb =new StringBuffer();
//public StringBuffer append(String str)
StringBuffer stringBuffer =sb.append("hello");
System.out.println(sb);//打印sb
System.out.println(stringBuffer);//打印 stringBuffer
System.out.println(sb==stringBuffer);//判断 sb 与stringBuffer是否相等
sb.insert(2,"hello");//hello中在第二个元素后加入hello
System.out.println(sb);
}
}
删除功能
public StringBuffer deleteCharAt(int index)
public StringBuffer delete(int start,int end)
public class StringBufferDemo3 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("hello").append("java").append("bigdata");
System.out.println(sb);
System.out.println("******************************");
//public StringBuffer deleteCharAt(int index)删除char在这个序列中的指定位置。
//返回的内容是本身
sb.deleteCharAt(5);
System.out.println(sb);//删除sb中下标为5的元素
// sb.deleteCharAt(20); //StringIndexOutOfBoundsException 超限
// System.out.println(sb);
//public StringBuffer delete(int start,int end)
// 删除此序列的子字符串中的字符。
// 子串开始于指定start并延伸到字符索引end - 1 ,
// 或如果没有这样的字符存在的序列的结束。 如果start等于end ,则不作任何更改。
//删除范围
sb.delete(5,9);
System.out.println(sb);
//如何利用现有方式删除所有的字符
System.out.println("******************************");
sb.delete(0,sb.length());
System.out.println(sb);
}
}
替换功能
public StringBuffer replace(int start,
int end,
String str)
用指定的String中的字符替换此序列的子字符串中的String 。
子串开始于指定start并延伸到字符索引end - 1 ,
或如果没有这样的字符存在的序列的结束。
第一子串中的字符被去除,然后指定String被插入在start 。 (
如果需要,此序列将被延长以容纳指定的字符串。)
public class StringBufferDemo4 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("hello").append("hadoop").append("hive").append("spark");
System.out.println(sb);
//public StringBuffer replace(int start,int end,String str)
//这里的start和end表示的是原来的字符串需要替换的区间,含头不含尾
sb.replace(11,12,"数加学院真好");
System.out.println(sb);
}
}
反转功能 public StringBuffer reverse()导致该字符序列被序列的相反代替。
如果序列中包含任何替代对,则将它们视为单个字符进行反向操作。
public class StringBufferDemo5 {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer();
sb.append("我想买三星s20u");
sb.replace(2,3,"好");
System.out.println(sb);
}
}
截取功能
String substring(int start)
返回一个新的 String ,其中包含此字符序列中当前包含的字符的子序列。
String substring(int start, int end)
返回一个新的 String ,其中包含此序列中当前包含的字符的子序列。
public class StringBufferDemo6 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("java")
.append("hadoop")
.append("hive")
.append("spark")
.append("flink");
System.out.println(sb);
System.out.println("******************");
//String substring(int start)
//返回一个新的 String ,其中包含此字符序列中当前包含的字符的子序列
String substring = sb.substring(4);
System.out.println("截出来的字符串为:"+substring);
System.out.println("StringBuffer的内容为:"+sb);
//String substring(int start, int end)
//返回一个新的 String ,其中包含此序列中当前包含的字符的子序列。
String substring1 = sb.substring(14, 19);
System.out.println("截出来的字符串为:"+substring1);
System.out.println("StringBuffer的内容为:"+sb);
}
}