温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

String、StringBuffer与StringBuilder三者的区别是什么

发布时间:2020-06-23 13:33:16 来源:亿速云 阅读:434 作者:元一 栏目:编程语言

今天就跟大家聊聊有关String、StringBuffer与StringBuilder三者的区别,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

概念:

String是C++、java等编程语言中的字符串。 在java、C#中,String类是不可变的,对String类的任何改变,都是返回一个新的String类对象。 String 对象是 System.Char 对象的有序集合,用于表示字符串。String 对象的值是该有序集合的内容,并且该值是不可变的。

StringBuffer是字符串变量,它的对象是可以扩充和修改的。StringBuffer对象的初始化不像String类的初始化一样,Java提供的有特殊的语法,而通常情况下一般使用构造方法进行初始化。

StringBuilder是一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候。

三者都是用来对字符串进行操作,String通常用来定义一个变量,而StringBuilder StringBuffer则通常用来对字符串进行拼接等操作。但其实String同样的可以用来拼接字符串,可我们为什么很少使用呢,这样从三者的底层代码说起。

String、StringBuffer与StringBuilder三者的区别是什么

String的底层代码为一个用final修饰的char数组,这意味着定义一个String变量以后,该变量的内容是不可变的。

String、StringBuffer与StringBuilder三者的区别是什么

String、StringBuffer与StringBuilder三者的区别是什么

String、StringBuffer与StringBuilder三者的区别是什么

StringBuilder 与StringBuffer都继承自AbstractStringBuilder,该类的char数组并没有用final修饰,内容是可变的,这个是什么意思呢。

比如:

String s1= "a";
String s2 = new String("b") ;
String s3 = s1+s2;

如果这样,我们得到“ab”这个字符串,因为String底层未不可变的字符串,所以会创建三个对象,都会占用内存,而这三个对象一直都未失去引用,所以jvm无法垃圾回收,造成内存资源的大量浪费,这在我们开发中是不推崇的,而StringBuilder 与StringBuffer则不存在这样的问题。

String、StringBuffer与StringBuilder三者的区别是什么

String、StringBuffer与StringBuilder三者的区别是什么

String、StringBuffer与StringBuilder三者的区别是什么

通过底层代码我们可以看到StringBuilder 与StringBuffer在拼接字符串时,通过判断字符串长度是否足够,从而创建一个新的数组用来封装数据,而原来的对象被放弃引用,等待垃圾回收,从而减少内存的浪费,因此在拼接字符串等操作时,我们通常使用StringBuilder 与StringBuffer,但两者在执行效率上又有不同,StringBuilder的执行效率较高,这是为什么呢?

String、StringBuffer与StringBuilder三者的区别是什么

String、StringBuffer与StringBuilder三者的区别是什么

通过底层源码,可以发现StringBuffer在拼接字符串时,使用了同步锁,安全性提高,而StringBuilder未使用同步锁,故效率提高。

看完上述内容,你们对String、StringBuffer与StringBuilder三者的区别有进一步的了解吗?如果还想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI