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) |
String类与StringBuffer类的更多相关文章
- String类和StringBuffer类的区别
首先,String和StringBuffer主要有2个区别: (1)String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,释放原String对象,StringB ...
- String类,StringBuffer类转字符数组
String不可变类型和StringBuffer可变类型 String类和StringBuffer类都是字符串表示类,区别在于String对象引用变量是不可变的,而StringBuffer类对象引用变 ...
- Java 常用类String类、StringBuffer类
常用类 String类.StringBuffer类 String代表不可变的字符序列 "xxxxxxx"为该类的对象 举例(1) public class Test { publi ...
- 【学习笔记】String进阶:StringBuffer类(线程安全)和StringBuilder类
一.除了使用String类存储字符串之外,还可以使用StringBuffer类存储字符串.而且它是比String类更高效的存储字符串的一种引用数据类型. 优点: 对字符串进行连接操作时,使用Strin ...
- 一大波Java来袭(四)String类、StringBuilder类、StringBuffer类对照
本文主要介绍String类.StringBuffer类.StringBuilder类的差别 : 一.概述 (一)String 字符串常量.可是它具有不可变性,就是一旦创建,对它进行的不论什么改动操作 ...
- (1)StringBuilder类和StringBuffer类 (2)日期相关的类 (3)集合框架 (4)List集合
1.StringBuilder类和StringBuffer类(查手册会用即可)1.1 基本概念 由于String类描述的字符串内容无法更改,若程序中出现大量类似的字符串时需要申请独立的内存空间单独保存 ...
- String类和StringBuffer类的方法
一.String类的方法 public char charAt(int index) 返回字符串index个字符 public int length() 返回字符串长 ...
- 【java】String类和StringBuffer类常用操作
String类是字符串常量,是不可更改的常量.而StringBuffer是字符串变量,它的对象是可以扩充和修改的.StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于Stri ...
- java中String类、StringBuilder类和StringBuffer类详解
本位转载自http://www.cnblogs.com/dolphin0520/p/3778589.html 版权声明如下: 作者:海子 出处:http://www.cnblogs.com/dolp ...
随机推荐
- ES建立索引步骤, 1,index 2.mapping 3,别名
1.建立索引PUT /index_trans_detail 2.建立mappingPOST /index_trans_detail/type_trans_detail/_mapping{ " ...
- java基础课程笔记 static 主函数 静态工具类 classpath java文档注释 静态代码块 对象初始化过程 设计模式 继承 子父类中的函数 继承中的构造函数 对象转型 多态 封装 抽象类 final 接口 包 jar包
Static那些事儿 Static关键字 被static修饰的变量成为静态变量(类变量) 作用:是一个修饰符,用于修饰成员(成员变量,成员方法) 1.被static修饰后的成员变量只有一份 2.当成员 ...
- nginx的preaccess 阶段的limit_req模块与limit_conn模块
limit_conn 模块限制并发连接数 [root@python vhast]# vim limit_conn.conf limit_conn_zone $binary_remote_addr zo ...
- 一 Spring概述
知识点概要: 1 SpringIOC入门(XML).Spring的Bean管理.Spring属性注入 2 SpringIOC注解方式.Spring的AOP开发(XML) 3 Spring的AOP注解开 ...
- oracle SQL 练习
COURSE 表 DROP TABLE "SCOTT"."course"; CREATE TABLE "SCOTT"."cours ...
- Python学习笔记011
多行注释 '''字符串 ''' 除了用来多行注释还可以用来打印多行
- LeetCode 19. Remove Nth Node From End of List(删除链表中倒数第N个节点)
题意:删除链表中倒数第N个节点. 法一:递归.每次统计当前链表长度,如果等于N,则return head -> next,即删除倒数第N个节点:否则的话,问题转化为子问题“对head->n ...
- 在Centos上安装Postgre SQL
检查PostgreSQL 是否已经安装 rpm -qa | grep postgres 检查PostgreSQL 是否已经安装 rpm -qal | grep postgres 检查PostgreSQ ...
- JS原型与原型链继承的理解
一.原型 先从构造函数开始吧! 构造函数是什么?构造函数与其他函数唯一的区别在于调用方式不同.任何函数只要通过new来调用就可以作为构造函数,它是用来创建特定类型的对象. 下面定义一个构造函数 Fem ...
- 企业面试问题收集-ssh框架
SSH框架阶段 SSH的优缺点,使用场景? Hibernate优缺点 Hibernate优点:(1) 对象/关系数据库映射(ORM)它使用时只需要操纵对象,使开发更对象化,抛弃了数据库中心的思想,完全 ...