“不经一番寒彻骨,怎得梅花扑鼻香”在人的一生当中有很多的机会和机遇,我们要认真的面对和冷静去选择!在职场上我们要懂得谦虚谨慎。加油哈码农们,相信我们的明天会更好!
一、String
1、定义:Sting对象用于处理文本(字符串)
2、用法:
new String(s)
String(s);
3、实例:
第一种;new方式
String s1 = new String(“hello world”);
String s2 = new String(“hello world”);
System.out.println(s1 == s2);//输出false
第二种:
String s3 = “hello world”;
String s4 = “hello world”;
System.out.println(s3 == s4);//输出trre
二、StringBuffer
1、定义:类的构造函数
2、用法
增
StringBuffer(“Tom”) 在创建对象的时候赋值
append() 在缓冲区的尾部添加新的文本对象
insert() 在指定的下标位置添加新的文本对象
删
delete(int start, int end)
deleteCharAt(int index)
查
toString() 返回这个容器的字符串
indexOf(String str) 返回第一次出现的指定子字符串在该字符串中的索引。
substring(int start) 从开始的位置开始截取字符串
改
replace(int start int endString str) 使用给定 String 中的字符替换此序列的子字符串中的字符。该子字符串从指定的 start 处开始,一直到索引 end - 1 处的字符
setCharAt(int index char ch) 指定索引位置替换一个字符
三、StringBuilder
1、定义:StringBuilder是动态对象,允许扩充它所封装的字符串中字符的数量,但是您可以为它可容纳的最大字符数指定一个值。
2、用法
(1)Append方法可用来将文本或对象的字符串表示形式添加到由当前StringBuilder对象表示的字符串的结尾处。
StringBuilder MyStringBuilders = new StringBuilder("Hello World!");
MyStringBuilders.Append("What's the weather like today?");
Console.WriteLine(MyStringBuilders);
(2)AppendFormat方法将文本添加到StringBuilder的结尾处,而且实现了IFormattable接口,因此可接受格式化部分中描述的标准格式字符串。可以使用此方法来自定义变量的格式并将这些值追加到StringBuilder的后面。以下示例使用AppendFormat方法将一个设置为货币值格式的整数值放置到StringBuilder的结尾。
int MyInts= 26
StringBuilder MyStringBuilders = new StringBuilder("你的总数是 ");
MyStringBuilders.AppendFormat("{0:C} ", MyInts);
Console.WriteLine(MyStringBuilders);
(3)Insert方法将字符串或对象添加到当前StringBuilder中的指定位置。
StringBuilder MyStringBuilders = new StringBuilder("Hello World!");
MyStringBuilders.Insert(6,"weather");
Console.WriteLine(MyStringBuilders);
(4)可以使用 delete方法从当前StringBuilder中移除指定数量的字符,移除过程从指定的从零开始的索引处开始。
StringBuilder MyStringBuilders = new StringBuilder("Hiiiiiii");
MyStringBuilders.delete(3,4);
Console.WriteLine(MyStringBuilders);
(5)使用Replace方法,可以用另一个指定的字符来替换StringBuilder对象内的字符。
StringBuilder MyStringBuilders = new StringBuilder("Hello World!");
MyStringBuilders.Replace('!', '?');
Console.WriteLine(MyStringBuilders);
四、区别和联系
-
可变与不可变
String通过查看String的源码我们知道String是通过字符数组来保存一个对象的,且在这个字符数组前面加了final修饰符,说明String对象是不可变的。这就导致每次String的操作就会生成新的对象,导致效率低下且浪费空间。 -
线程是否安全
- String对象不可变,可理解为它是线程安全的;
- StringBuffer 是线程安全的;
- StringBuider 是非线程安全的。
从源码可以看出, StringBuffer 在方法或调用方法前面加上了Synchronized 同步锁,所以是线程安全的。
每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量(通常是16个字节),就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。
从 JDK 5 开始,为StringBuffer类补充了一个单个线程使用的等价类,即StringBuilder。与该类相比,通常应该优先使用StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
StringBuffer 和 StringBuilder 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而insert 方法则在指定的点添加字符。
共同点
StringBuffer 和 StingBuilder 都继承自 AbstractStringBuilder(抽象类)
抽象类和接口的区别是:
- 抽象类可以定义一些子类公共的方法,子类只需要增加新的功能,而不需要重复写已经存在的功能。
- 接口只是定义一些常量和对方法的声明。