查看: 55|回复: 0

String类与StringBuffer类

[复制链接]
发表于 2020-2-16 04:50:08 | 显示全部楼层 |阅读模式
String类与StringBuffer类


一、String类和StringBuffer类的区别
String类是不可变类,新建的对象为不可变对象(String类的内容和长度是固定的),一旦被创建就不能修改它的值(对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值生存进去); String类是final类型不可被继承。                       
StringBuffer类是可变类,新建的对象是一个可变的对象,当需要修改其内容的时候,不需要再创建新的字符串对象,而是直接操作原来的串;不能通过赋值符号对他进行赋值(只能通过构造函数来建立, StringBuffer sb = new StringBuffer(),每个StringBuffer对象都有一定的缓冲区容量,当字符串巨细超过容量时,会主动增加容量);字符勾通接操作中StringBuffer的效率要比String高。                       
另外由于StringBuffer是线程安全的,所以在多线程程序中也可以很方便的进利用用,但是程序的执行效率相对来说就要稍微慢一些。从JDK5开始,为该类增补了一个单个线程使用的等价类,即StringBuilder。与该类相比,通常应该优先使用StringBuilder,因为它支持所有相同的操作,但由于它不支持同步,所以速率更快。                       
String 作为参数传递是类似于根本数据类型作为参数传递(值传递),StringBuffer 作为参数传递就是引用数据类型传递。                       
总结一下:                       
相同点:
(1)String类与StringBuffer类都用来处理字符串。                       
(2)部分方法在二者中的用法是相同的。                       
(3)在这两个类中,字符的索引都是从0开始的。                       
(4)这两个类都是CharSequence的子类。CharSequence接口描述的是一系列字符集。                       
不同点:                               
(1)String类是不可变类,因为在底端是用字符数组实现的,而数组长度固定,一旦赋值,就不能在原来的字符串上进行修改可能会浪费空间。StringBuffer类是可变类,能够在原来的数组上进行修改。                       
(2)String类覆盖了Object类的equals()方法,而StringBuffer类没有覆盖该方法。比力StringBuffer字符串内容是否相当,可以使用toString() 方法将StringBuffer的内容转换为String 字符串,再使用equals()方法比力。                       
(3)固然两个类都覆盖了toString()方法,但各自的实现方式不同。String类的toString()方法返回当前String对象的引用。而StringBuffer类的toString()方法返回一个以当前StringBuffer的缓冲区的所有字符为内容的新的String对象的引用。                       
(4)String类对象可以用操作符"+"进行毗连,而StringBuffer类的对象通过append()方法添加新的字符串。                       
二、StringBuffer对象和String对象之间的互转                       
String s = "abc";
StringBuffer sb1 = new StringBuffer("123");
StringBuffer sb2 = new StringBuffer(s);   //Sring转换为StringBuffer
String s1 = sb1.toString();              //StringBuffer转换为String
三、StringBuffer类                       
1.StringBuffer的构造方法                               
public StringBuffer() 构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。                       
public StringBuffer(int capacity):指定容量巨细                       
public StringBuffer(String str):构造一个字符串缓冲区:内里的容量(字符串内容英文)巨细:字符串长度+16初始容量                       
使用append()方法在字符串反面追加东西的时候,如果长度超过了该字符串存储空间巨细了就主动进行扩容:构建新的存储空间更大的字符串,将旧的复制过去;                       
在进行字符串append添加的时候,会先盘算添加后字符串巨细,传入一个方法:ensureCapacityInternal 这个方法进行是否扩容的判断,需要扩容就调用expandCapacity方法进行扩容:实验将新容量扩为巨细变成2倍+2 ,判断一下                        容量如果不够,直接扩充到需要的容量巨细。                       
2.StringBuffer获取功能                               
public int capacity():初始容量                       
public synchronized int length():返回字符串长度                       
3.StringBuffer的添加功能                               
StringBuffer append(xxx x):将指定的内容追加(末尾追加)到字符串缓冲区中,返回StringBuffer本身                       
public StringBuffer insert(int index,xxx x):在指定位置处,插入一个新的内容,返回StringBuffer本身                       
void setLength(int newLength)                重新设置字符串缓冲区中字符串的长度,如果newLength小于当前的字符串长度,将截去多余的字符。                       
public void ensureCapacity (int minimumCapacity)                重新设置字符号串缓冲区的总空间。如果minimumCapacity大于当前的总空间,则新的空间被设置:一种结果是minimumCapacity;另一种结果是{"老空间"乘2加2}。                       
4.StringBuffer的删除功能                               
StringBuffer deleteCharAt(int index) :删除指定位置出的字符,返回字符串缓冲区本身                       
StringBuffer delete(int start, int end) :删除从指定位置开始到指定位置结束,返回值字符串缓冲区本身                       
public void trimToSize()将StringBuffer对象的中存储空间缩小到和字符串长度一样的长度,淘汰空间的浪费。                       
5.StringBuffer的替换功能                               
public StringBuffer replace(int start,int end,String str):从指定位置开始到指定位置结束,用给定的str字符串替换指定的字符内容                       
public void setCharAt(int index, char ch):修改对象中索引值为index位置的字符为新的字符ch
6.StringBuffer的反转功能                               
public StringBuffer reverse () 反转功能                       
7.StringBuffer的截取功能                               
String substring(int start) :从指定位置默认截取到末尾,返回一个新的字符串                       
String substring(int start,int end):从指定位置开始截取到指定位置结束                       
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)                从当前StringBuffer对象的索引号srcBegin开始,到srcEnd结束的子串,赋值到字符数组dst中,而且从dst的索引号dstBegin开始。                       
8. StringBuffer查找功能                               
int indexOf(String str) 返回当前StringBuffer对象中,第一个满足str子串的位置。                       
int indexOf(String str, int fromIndex)                从当前StringBuffer对象的fromIndex开始查找,返回第一个满足str子串的位置。                       
int lastIndexOf(String str)                返回当前StringBuffer对象中,最后一个满足str子串的位置。                       
int lastIndexOf(String str, int fromIndex)                从当前StringBuffer对象的fromIndex开始查找,返回最后一个满足str子串的位置。                       
四、String类方法(分类参考)                       
[table][tr][td=2,1]方法摘要
[/td][/tr][tr][td]char
[/td][td]charAt(intindex)
返回指定索引处的char值。
[/td][/tr][tr][td]int
[/td][td]codePointAt(intindex)
返回指定索引处的字符(Unicode 代码点)。
[/td][/tr][tr][td]int
[/td][td]codePointBefore(intindex)
返回指定索引之前的字符(Unicode 代码点)。
[/td][/tr][tr][td]int
[/td][td]codePointCount(intbeginIndex, intendIndex)
返回此String的指定文本范围中的 Unicode 代码点数。
[/td][/tr][tr][td]int
[/td][td]compareTo(StringanotherString)
按字典顺序比力两个字符串。
[/td][/tr][tr][td]int
[/td][td]compareToIgnoreCase(Stringstr)
按字典顺序比力两个字符串,不考虑巨细写。
[/td][/tr][tr][td]String
[/td][td]concat(Stringstr)
将指定字符勾通接到此字符串的结尾。
[/td][/tr][tr][td]boolean
[/td][td]contains(CharSequences)
当且仅当此字符串包含指定的 char 值序列时,返回 true。
[/td][/tr][tr][td]boolean
[/td][td]contentEquals(CharSequencecs)
将此字符串与指定的CharSequence比力。
[/td][/tr][tr][td]boolean
[/td][td]contentEquals(StringBuffersb)
将此字符串与指定的StringBuffer比力。
[/td][/tr][tr][td]staticString
[/td][td]copyValueOf(char[]data)
返回指定数组中表示该字符序列的 String。
[/td][/tr][tr][td]staticString
[/td][td]copyValueOf(char[]data, intoffset, intcount)
返回指定数组中表示该字符序列的 String。
[/td][/tr][tr][td]boolean
[/td][td]endsWith(Stringsuffix)
测试此字符串是否以指定的后缀结束。
[/td][/tr][tr][td]boolean
[/td][td]equals(ObjectanObject)
将此字符串与指定的对象比力。
[/td][/tr][tr][td]boolean
[/td][td]equalsIgnoreCase(StringanotherString)
将此String与另一个String比力,不考虑巨细写。
[/td][/tr][tr][td]staticString
[/td][td]format(Localel,Stringformat,Object...args)
使用指定的语言环境、格式字符串和参数返回一个格式化字符串。
[/td][/tr][tr][td]staticString
[/td][td]format(Stringformat,Object...args)
使用指定的格式字符串和参数返回一个格式化字符串。
[/td][/tr][tr][td]byte[]
[/td][td]getBytes()
使用平台的默认字符集将此String编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
[/td][/tr][tr][td]byte[]
[/td][td]getBytes(Charsetcharset)
使用给定的charset将此String编码到 byte 序列,并将结果存储到新的 byte 数组。
[/td][/tr][tr][td]void
[/td][td]getBytes(intsrcBegin, intsrcEnd, byte[]dst, intdstBegin)
已过时。该方法无法将字符正确转换为字节。从 JDK 1.1 起,完成该转换的首选方法是通过getBytes()方法,该方法使用平台的默认字符集。
[/td][/tr][tr][td]byte[]
[/td][td]getBytes(StringcharsetName)
使用指定的字符集将此String编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
[/td][/tr][tr][td]void
[/td][td]getChars(intsrcBegin, intsrcEnd, char[]dst, intdstBegin)
将字符以后字符串复制到目标字符数组。
[/td][/tr][tr][td]int
[/td][td]hashCode()
返回此字符串的哈希码。
[/td][/tr][tr][td]int
[/td][td]indexOf(intch)
返回指定字符在此字符串中第一次出现处的索引。
[/td][/tr][tr][td]int
[/td][td]indexOf(intch, intfromIndex)
返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜刮。
[/td][/tr][tr][td]int
[/td][td]indexOf(Stringstr)
返回指定子字符串在此字符串中第一次出现处的索引。
[/td][/tr][tr][td]int
[/td][td]indexOf(Stringstr, intfromIndex)
返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
[/td][/tr]

天涯海角也要找到Ni:String类与StringBuffer类

相关技术服务需求,请联系管理员和客服QQ:2753533861或QQ:619920289
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

帖子推荐:
客服咨询

QQ:2753533861

服务时间 9:00-22:00

快速回复 返回顶部 返回列表