java-学习之路-String和StringBuild和StringBuffer的区别
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-学习之路-String和StringBuild和StringBuffer的区别,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1520字,纯文字阅读大概需要3分钟。
内容图文
![java-学习之路-String和StringBuild和StringBuffer的区别](/upload/InfoBanner/zyjiaocheng/852/2bd1d9f363df435eb976500ca2b728fa.jpg)
从表层分析就一句话.
String 里面的value[]数组不可改变, StringBulid和StringBuffer里面value[]数组可以改变.
具体原因为:
- String 里面的value[]被定义为private fainal char[]value;fainal的特性保证了value只可以被初始化一次,然后就不可以改变.
- 而且value的可见性是private的,私有属性的特性为,只有在同一个类中能够访问,其他的任何的都不可访问的到,也就避免了在其他地方被修改的可能性.
- StringBulid和StringBuffer的内部char[]value是没有可见性修饰的,也就是可见性为默认状态,这种状态可以被同一个包下的其他类访问, 最关键的是其并未设定final关键字,所以这个数组可以被修改
为什么可以有string str1 = "abc"; str1 = "xyz";这种操作呢, 这里貌似看起来是修改了String中char value[]的值,但是实际上并不是,只是str1这个引用被重新赋值了, 他指向了新的字符串对象"xyz"; 形如str1 = str1+ ''op";这种操作,执行后str1中value[]中存放的变为"abcop";但是其实是重新创建了一个新的字符串对象,并将这个字符串对象的引用赋值给str1;
而StringBuffer和StringBuild两个类可以修改value数组,所以他们的效率要比string要高一些,因为string需要不断创建新的对象并且对这些对象进行管理, StringBuffer和StringBuild在初始化构造value数组时,会创建一个比所需内存空间大32字节(16个char类型)的内存块.当对value数组进行修改,比如增加操作时,会优先检查当前value数组是否能够满足所需的最小空间, 假如不足就进行扩容,每次扩容都是2capacity + 2这种方式如 17->36->74....
stringBuffer和stringBuild区别在于线程安全性问题, stringBuffer是线程安全的, StringBuild是线程不安全的,但是不安全的效率高啊哈哈.
所以进行少量字符串操作可以使用String, 大量字符串单线程使用StringBuild, 大量字符串多线程(需要考虑线程安全)使用StringBuffer
内容总结
以上是互联网集市为您收集整理的java-学习之路-String和StringBuild和StringBuffer的区别全部内容,希望文章能够帮你解决java-学习之路-String和StringBuild和StringBuffer的区别所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。