域名问题网站不更新,对电子商务专业的认识和了解,晋江原创网,用什么软件做网站模板*************************************优雅的分割线 **********************************
分享一波:程序员赚外快-必看的巅峰干货
如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程
请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更…*************************************优雅的分割线 **********************************
分享一波:程序员赚外快-必看的巅峰干货
如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程
请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更新 *************************************优雅的分割线 **********************************
String与StringBuffer和StringBuilder的根本区别String为什么无法修改字符串长度
从网上看了很多的信息说的大部分是关于final修饰的原因却没有详细的解释根据自己收集的资料跟大家分享一下我的观点有错请指正。 1.我们都知道在修改字符串长度的时候StringBuffer和StringBuilder的修改字符串效率要高于String原因也是简单的因为StringBuffer和StringBuilder在修改的时候不会重新创建对象而String却是要重新创建对象的。 有人说这种情况的原因在于String是被final修饰的一旦创建便不能修改。但是StringBuffer和StringBuilder同样是final修饰的大家有没有想过为什么他们可以修改呢 如图
String的图 StringBufferStringBuilder一样的图 所以原因并不在于StringBuffer和StringBuilder还有String是被final修饰的 那么真实的原因是什么 我们要知道字符串在本质上是字符数组所以我们来看看StringBuffer和StringBuilder还有String是如何定义字符数组的通过对数组的定义来发现其中的原理。 如图
StringBuilder的源码图因为StringBuilder中大多数方法都是调用父类的AbstractStringBuilder所以直接上父类源码StringBuffer是一样的 String的源码图 发现了吗两者的区别在于String的字符数组是final修饰的而StringBuffer和StringBuilder并没有
详细解释
或许在这里有人说在java里数组的长度是不可变的所以有final修饰数组和没有final修饰没有区别在这里要说确实数组是不可更改的但是我们要改的并不是数组而是类中的一个属性 final修饰的属性是最终的不可更改没有final修饰的属性是可以修改的 这样就造成String中的字符数组属性一旦创建便无法修改要修改字符数组的属性就只能重新新造一个字符数组也就是新创建一个String对象这就相当于字符数组属性和String形成了一个整体牵一发而动全身 而StringBuffer和StringBuilder中的字符数组属性可以更改在修改字符串时可以通过修改没有fianl修饰的字符数组属性而不用重新创建对象。
*************************************优雅的分割线 **********************************
分享一波:程序员赚外快-必看的巅峰干货
如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程
请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更新 *************************************优雅的分割线 **********************************