String类与StringBuffer类
2020-02-06 16:02:38来源:博客园 阅读 ()
String类与StringBuffer类
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); //String转换为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类方法(分类参考)
方法摘要 | |
?char | charAt(int?index) |
?int | codePointAt(int?index) |
?int | codePointBefore(int?index) |
?int | codePointCount(int?beginIndex, int?endIndex) |
?int | compareTo(String?anotherString) |
?int | compareToIgnoreCase(String?str) |
?String | concat(String?str) |
?boolean | contains(CharSequence?s) |
?boolean | contentEquals(CharSequence?cs) |
?boolean | contentEquals(StringBuffer?sb) |
static?String | copyValueOf(char[]?data) |
static?String | copyValueOf(char[]?data, int?offset, int?count) |
?boolean | endsWith(String?suffix) |
?boolean | equals(Object?anObject) |
?boolean | equalsIgnoreCase(String?anotherString) |
static?String | format(Locale?l,?String?format,?Object...?args) |
static?String | format(String?format,?Object...?args) |
?byte[] | getBytes() |
?byte[] | getBytes(Charset?charset) |
?void | getBytes(int?srcBegin, int?srcEnd, byte[]?dst, int?dstBegin) |
?byte[] | getBytes(String?charsetName) |
?void | getChars(int?srcBegin, int?srcEnd, char[]?dst, int?dstBegin) |
?int | hashCode() |
?int | indexOf(int?ch) |
?int | indexOf(int?ch, int?fromIndex) |
?int | indexOf(String?str) |
?int | indexOf(String?str, int?fromIndex) |
?String | intern() |
?boolean | isEmpty() |
?int | lastIndexOf(int?ch) |
?int | lastIndexOf(int?ch, int?fromIndex) |
?int | lastIndexOf(String?str) |
?int | lastIndexOf(String?str, int?fromIndex) |
?int | length() |
?boolean | matches(String?regex) |
?int | offsetByCodePoints(int?index, int?codePointOffset) |
?boolean | regionMatches(boolean?ignoreCase, int?toffset,?String?other, int?ooffset, int?len) |
?boolean | regionMatches(int?toffset,?String?other, int?ooffset, int?len) |
?String | replace(char?oldChar, char?newChar) |
?String | replace(CharSequence?target,?CharSequence?replacement) |
?String | replaceAll(String?regex,?String?replacement) |
?String | replaceFirst(String?regex,?String?replacement) |
?String[] | split(String?regex) |
?String[] | split(String?regex, int?limit) |
?boolean | startsWith(String?prefix) |
?boolean | startsWith(String?prefix, int?toffset) |
?CharSequence | subSequence(int?beginIndex, int?endIndex) |
?String | substring(int?beginIndex) |
?String | substring(int?beginIndex, int?endIndex) |
?char[] | toCharArray() |
?String | toLowerCase() |
?String | toLowerCase(Locale?locale) |
?String | toString() |
?String | toUpperCase() |
?String | toUpperCase(Locale?locale) |
?String | trim() |
static?String | valueOf(boolean?b) |
static?String | valueOf(char?c) |
static?String | valueOf(char[]?data) |
static?String | valueOf(char[]?data, int?offset, int?count) |
static?String | valueOf(double?d) |
static?String | valueOf(float?f) |
static?String | valueOf(int?i) |
static?String | valueOf(long?l) |
static?String | valueOf(Object?obj) |
原文链接:https://www.cnblogs.com/ITnoteforlsy/p/12270884.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- java里面main方法中的String[]args 2020-06-07
- String 也能做性能优化,我只能说牛逼! 2020-06-03
- Java--类与对象简介 2020-05-26
- java.lang.String 的 + 号操作到底做了什么? 2020-05-22
- 我说我精通字符串,面试官竟然问我Java中的String有没有长度 2020-05-20
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash