String
保存的是字符串常量,值不能被修改,每次更新都会重新开辟空间,创建对象、重新指向,效率较低。所以提供了StringBuilder和StringBuffer来增强String的功能。
private final char value[]
常用方法
equalsIgnoreCase()//忽略大小写判断是否相等
indexOf()//字符在字符串中第一次出现的索引,没有返回-1
lastIndexOf()//
charAt()//获取某索引处的字符
subString()//按索引截取
toUpperCase()//转换成大写
replace()//将所有的前一个字符串替换成后一个字符串
split()//以内部参数字符串为标准,对字符串进行分割,返回字符串数组
compareTo()//比较时可区分大小,就返回字符的差值,故前者大返回整数
//一字符串是另一字符串前面的部分,则返回字符串长度的差值
format(formatStr, 参数)//占位符:%s-字符串替换,%d-整数,%.2f-保留小数点后两位的小数(并四舍五入),%c-字符
\\字符串在java中需要用"\\\\"表示
StringBuffer
是一个容器,是可变长度的。
是final类,不能被继承。
直接父类是AbstractStringBuilder。实现了Serializable,是可串行化的(可网络传输、保存到文件)
在父类中AbstractStringBuilder有属性char[] value数组存放字符串内容,因此存放在堆中,而不是String那样地址存放在堆中,内容在常量池。
保存的是字符串变量,不用每次都更新地址,只有数组空间大小不够才会更新,效率较高,线程安全。
1、初始容量为16字符,char[16]
2、也可构造器中指定大小
3、或构造器中传入字符串作为参数,长度为字符串length+16
//String -> StringBuffer
new StringBuffer(str)
//StringBuffer -> String
stringBuffer2.toString();
new String(stringBuffer2);
常用方法
append("努力").append(true)//追加
delete(11,14)//删除[11,14)的字符
replace(9,11,"哈哈")//[9,11)的字符替换
indexOf("卧槽")//第一次出现的索引,找不到返回-1
insert(9,"加油")//索引为9的前面插入
length()
StringBuilder
与StringBuffer类似,在大多数实现中,它比StringBuffer要快,主要操作是append和insert方法
,但是它的方法不是线程安全的(synchronized),没有做互斥处理,所以用在字符串缓冲区被单个线程使用的时候(单线程情况下使用)。
比较
String效率低(特别是循环、大量修改),复用率高(都指向常量池里的它,被多个对象引用)。
StringBuffer效率高(增删),线程安全。
StringBuilder效率最高,线程不安全。
标签:11,字符,常用,Java,String,StringBuffer,线程,字符串 From: https://www.cnblogs.com/fallorange/p/17691777.html