摘要:当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用而不用的,就是速度的原因。
第三阶段 JAVA常见对象的学习 StringBuffer和StringBuilder类 (一) StringBuffer类的概述 (1) 基本概述
下文以StringBuffer为例
前面我们用字符串做拼接,比较耗时并且也耗内存(每次都会构造一个新的string对象),而这种拼接操作又是比较常见的,为了解决这个问题,Java就提供了两个字符串缓冲区类。StringBuffer和StringBuilder供我们使用。
简单比较:
String 长度大小不可变
StringBuffer 长度可变、线程安全、速度较慢
StringBuilder 长度可变、线程不安全、速度最快
-----------------------------------------------------------------------------------------------------------------
解释:
在执行速度方面的比较:StringBuilder > StringBuffer
StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,不像String一样创建一些对象进行操作,所以速度就快了。
StringBuilder:线程非安全的
StringBuffer:线程是安全的(synchronized关键字进行修饰)
当我们在字符串缓冲区被多个线程使用时,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
对于三者使用的总结:
1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
//无参构造方法 StringBuffer() //指定容量的字符串缓冲区对象 StringBuffer(int size) //指定字符串内容的字符串缓冲区对象 StringBuffer(String str)(二) StringBuffer 类的功能 (1) 添加功能
//可以把任意类型添加到字符串缓冲区里,并且返回字符串缓冲区本身(this) public StringBuffer append (String str) //在offset位置把任意类型的数据插入到字符串缓冲区中,并且返回字符串缓冲区本身(this) public StringBuffer insert(int offset,String str)(2) 删除功能
//删除指定位置的字符,并且返回本身 public StringBuffer deleteCharAt(int index) //删除从指定位置开始指定位置结束的内容,并且返回本身 public StringBuffer delete(int start, int end)(3) 替换功能
//从start到end用str代替 public StringBuffer replace(int start,int end,String str)(4) 反转功能
//Eg: 好你界世 → 世界你好 public StringBuffer reverse()(5) 截取功能
//从start位置开始截取,取以后字符串,但不返回本身,原数据不影响 public String substring(int start) //截取start到end之间的字符串 Publci Stirng substring(int start, int end)(三) String 和 StringBuffer 类相互转换 (1) 转换原因:
String → StringBuffer 是为了使用后者的功能
StringBuffer → String 可能需要后者的类型
(2) 转换方式※ String → StringBuffer
String s = “Hello” //通过构造方法 StringBuffer a = new StringBuffer(s); //通过append()方法 StringBuffer a = new StringBuffer(); a.append(s);
※ StringBuffer → String
StringBuffer buffer = new StringBuffer(“java”) //通过构造方法 String str = new String (buffer); //通过toString()方法 String str = buffer.toString();(四) “+” 和 StringBuilder 类的爱恨情仇
首先java并不支持运算符重载。
(String类中的 “+”“+=”是java中仅有的两个重载过的运算符)
所以我们可以通过“+”符号 将多个字符串进行拼接
将这段代码利用 javap -c filename 反编译
我们可以看到代码被编译器自动优化成使用StringBuilder方式拼接
运行效率得到了保证
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/74928.html
摘要:原文经历了上次的的六道坎发现编故事有点上瘾,而且记忆效果也不错哈哈,今天继续唠叨一下与的爱恨情仇。它是万物的尽头,继承于虚无,为。接着由其衍生出第二神,另外一个,也就是。也估计是让人引起误解的源头。所以接下来的问题就更容易了,比如。 原文:https://blog.crimx.com/2017/0... 经历了上次的《JavaScript This 的六道坎》 发现编故事有点上瘾,而且...
摘要:虽然性能极佳,而且提供了大量的特性,包括全文索引压缩空间函数等,但不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复。 一 MyISAM 1.1 MyISAM简介 MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的 ISAM (Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,而且提供了大量的特性,包括全...
摘要:虽然性能极佳,而且提供了大量的特性,包括全文索引压缩空间函数等,但不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复。 Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去,欢迎建议和指导):https://github.com/Snailclimb/Java_Guide 一 MyISAM 1.1 MyISAM简介 MyISAM是MySQL的默认数据库引擎(5.5...
阅读 1105·2021-11-23 10:05
阅读 1784·2021-11-12 10:36
阅读 1852·2019-08-30 15:56
阅读 1683·2019-08-29 12:32
阅读 3041·2019-08-28 18:04
阅读 3426·2019-08-26 12:17
阅读 2501·2019-08-26 11:35
阅读 1239·2019-08-23 15:11