跟着猿人学Java-004-String、StringBuffer、StringBuilder三角恋,什么关系?

大家好,我是猿人,今天给码农或即将成为码农或想成为码农的朋友讲讲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(字符串变量)

当对字符串进行修改的时候,需要使用 StringBufferStringBuilder 类。和 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

希望程序员朋友能认真学习,根据自身需要获取对应的电子书,学习是永无止境的。

你多学一样本事,就少说一句求人的话,现在的努力,是为了以后的不求别人,实力是最强的底气。记住,活着不是靠泪水博得同情,而是靠汗水赢得掌声。 ——《写给程序员朋友》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿码天地

相互学习,谢谢您的打赏。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值