大家好,我是猿人,今天给码农或即将成为码农或想成为码农的朋友讲讲String、StringBuffer、StringBuilder,它们是啥,有什么关系?现在是深夜23:00分,猿人最擅长熬夜,就是不怕掉头发!一切都是为了亲爱的粉丝朋友能学到知识,猿人熬夜也是值得的!
我是猿人,一个热爱技术、热爱编程的IT猿。技术是开源的,知识是共享的!
写作是对自己学习的总结和记录,如果您对 Java、分布式、微服务、中间件、Spring Boot、Spring Cloud等技术感兴趣,可以关注我的动态,我们一起学习,一起成长!
用知识改变命运,让家人过上更好的生活,互联网人一家亲!
---公众号「猿码天地」
Java知识学堂:https://gitee.com/zhangbw666/it-knowledge
你多学一样本事,就少说一句求人的话,现在的努力,是为了以后的不求别人,实力是最强的底气。记住,活着不是靠泪水博得同情,而是靠汗水赢得掌声。——《写给程序员朋友》
好,废话不多说,直接干,进入正题:Good Good Study,Day Day Up!
1. String(字符串常量)
字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String
类来创建和操作字符串。
需要注意的是,String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,这样不仅效率低下,而且大量浪费有限的内存空间。
String类常用方法
-
length()
返回字该字符串的长度
-
截取字符串
substring(int beginIndex)
该方法从beginIndex位置起(包含这个位置)到最后截取一个字符串返回。
[beginIndex,最后]
substring(int beginIndex,endIndex)
该方法从beginIndex位置起(包含这个位置)到endIndex - 1截取一个字符串返回。
[beginIndex,endIndex - 1]
例子:
String str1 = new String("abcdefgkl");
String str2 = str1.substring(2);//str2 = "cdefgkl"
String str3 = str1.substring(2,5);//str3 = "cde"
-
字符串比较
public int compareTo(String anotherString)
该方法是对字符串内容按字典顺序进行大小比较,通过返回的整数值指明当前字符串与参数字符串的大小关系。若当前对象比参数大则返回正整数,反之返回负整数,相等返回0。其比较规则是:拿出字符串的第一个字符与参数的第一个字符进行比较,如果两者不等,比较结束,返回两者的ascii差。这里有一点需要注意:如果两个字符串的长度不同,并且一个字符串与另一个字符串的前面N个字符相等,那么这个方法返回返回两个字符串长度之差。
public int compareToIgnore(String anotherString)
与compareTo方法相似,但忽略大小写。
public boolean equals(Object anotherObject)
比较当前字符串和参数字符串,在两个字符串相等的时候返回true,否则返回false。
public boolean equalsIgnoreCase(String anotherString)
与equals方法相似,但忽略大小写。
-
字符串连接
public String concat(String str)
将参数中的字符串str连接到当前字符串的后面,效果等价于"+"。
-
字符串中单个字符查找
public int indexOf(int ch/String str)
用于查找当前字符串中字符或子串,返回字符或子串在当前字符串中从左边起首次出现的位置,若没有出现则返回-1。
public int indexOf(int ch/String str, int fromIndex)
改方法与第一种类似,区别在于该方法从fromIndex位置向后查找。
public int lastIndexOf(int ch/String str)
该方法与第一种类似,区别在于该方法从字符串的末尾位置向前查找。
public int lastIndexOf(int ch/String str, int fromIndex)
该方法与第二种方法类似,区别于该方法从fromIndex位置向前查找。
-
字符串中字符的大小写转换
public String toLowerCase()
返回将当前字符串中所有字符转换成小写后的新串
public String toUpperCase()
返回将当前字符串中所有字符转换成大写后的新串
-
字符串中字符的替换
public String replace(char oldChar, char newChar)
用字符newChar替换当前字符串中所有的oldChar字符,并返回一个新的字符串。
public String replaceFirst(String regex, String replacement)
该方法用字符replacement的内容替换当前字符串中遇到的第一个和字符串regex相匹配的子串,应将新的字符串返回。
public String replaceAll(String regex, String replacement)
该方法用字符replacement的内容替换当前字符串中遇到的所有和字符串regex相匹配的子串,应将新的字符串返回。
2. StringBuffer和StringBuilder(字符串变量)
当对字符串进行修改
的时候,需要使用 StringBuffer
和 StringBuilder
类。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象
。StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的
(不能同步访问)。由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder
类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
StringBuffer和StringBuilder的不同点
-
线程安全
StringBuffer类 (jdk1.0版本):适用于多线程,方法利用synchronized同步锁,牺牲性能换安全
StringBuilder类(jdk1.5版本):适用于单线程,没有给方法施加synchronized同步锁,牺牲了安全换性能
-
性能
StringBuffer:线程安全,性能较差,开销大
StringBuilder:线程不安全,性能较好,开销小
相同条件下,使用StringBuilder,比使用StringBuffer能获得10%~15%
左右的性能提升
StringBuffer和StringBuilder支持的方法
public StringBuffer append(String s)
将指定的字符串追加到此字符序列。
public StringBuffer reverse()
将此字符序列用其反转形式取代。
public delete(int start, int end)
移除此序列的子字符串中的字符。
public insert(int offset, int i)
将 int 参数的字符串表示形式插入此序列中。
replace(int start, int end, String str)
使用给定 String 中的字符替换此序列的子字符串中的字符。
int capacity()
返回当前容量
void setCharAt(int index, char ch)
将给定索引处的字符设置为 ch。
void setLength(int newLength)
设置字符序列的长度。
3. 总结

String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用于多线程下在字符缓冲区进行大量操作的情况
猿人于2021年4月1日 1点30分 于深圳整理,整理完这篇文章头发还有10万零545根,今天掉了2根头发,持续记录头发根数,加油!
福利一:月薪3万Java优秀简历模板
简历是对你过往学习和工作的一个总结,一份好的简历容易给人留下深刻印象,更容易被企业发现,创造更多的就业机会。优秀的简历可以把你推销给优秀的企业,看看别人的优秀简历范文,让自己的简历更加优秀吧。
获取方式:
微信搜索「猿码天地」或者扫描下面的二维码,关注后回复关键字「简历」即可获取!
福利二:全网最全一线大厂Java笔试面试题
面试题涵盖了Spring核心知识、SpringMVC、SpirngBoot、SpringCloud、JVM、数据库、常用消息组件Kafka、RabbitMQ、分布式、微服务组件Eureka、Ribbon、Config、Feign、Nacos、Zookeeper等、SQL优化、常用服务器Tomcat、Nginx、多线程、高并发等等。
部分截图:
获取方式:
微信搜索「猿码天地」或者扫描下面的二维码,关注后回复关键字「BAT面试」即可获取!
福利三:1000+本Java开发精华电子书
猿人从事Java开发多年,从最初的小白,一步步通过自己不断的学习、摸索,终于走上了码农这条没有回头的路。学习是无止境的,有时零零散散的学习资料难以将我们的知识成体系的串联起来。为此,为了让大家在学习Java的道路上成系统的学习,少走弯路,猿人为大家整理了1000+本Java开发精华电子书,毕竟现在电子书也是挺贵的,哈哈,希望能给大家带来帮助。
电子书涵盖:Java入门、并发编程、底层、常用框架、性能优化、设计模式、工具、计算机网络、操作系统、数据库、数据结构与算法、大数据、架构设计、Linux知识、面试、扩展、管理、容器化技术、云计算、微服务、领域设计等方方面面,猿人还会给持续更新。
部分目录:
获取方式:
第一种:微信搜索「猿码天地」或者扫描下面的二维码,关注后回复关键字「电子书」即可获取!
第二种:Gitee:https://gitee.com/zhangbw666/java-books
希望程序员朋友能认真学习,根据自身需要获取对应的电子书,学习是永无止境的。
你多学一样本事,就少说一句求人的话,现在的努力,是为了以后的不求别人,实力是最强的底气。记住,活着不是靠泪水博得同情,而是靠汗水赢得掌声。 ——《写给程序员朋友》