问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

bufferstring 是线程安全的吗

发布网友 发布时间:2022-04-29 17:48

我来回答

1个回答

热心网友 时间:2023-10-25 20:20

String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。
而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。而在某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,而特别是以下的字符串对象生成中, String 效率是远要比 StringBuffer 快的:
String S1 = “This is only a” + “ simple” + “ test”;
StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
你会很惊讶的发现,生成 String S1 对象的速度简直太快了,而这个时候 StringBuffer 居然速度上根本一点都不占优势。其实这是 JVM 的一个把戏,在 JVM 眼里,这个
String S1 = “This is only a” + “ simple” + “test”; 其实就是:
String S1 = “This is only a simple test”; 所以当然不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的 String 对象的话,速度就没那么快了,譬如:
String S2 = “This is only a”;
String S3 = “ simple”;
String S4 = “ test”;
String S1 = S2 +S3 + S4;
这时候 JVM 会规规矩矩的按照原来的方式去做

在大部分情况下 StringBuffer > String
StringBuffer
Java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
例如,如果 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包含“startle”,而 z.insert(4, "le") 将更改字符串缓冲区,使之包含“starlet”。
在大部分情况下 StringBuilder > StringBuffer
java.lang.StringBuilde
java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同

明白 了不、
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
Ba(NO3)2与H2SO3 反应的生成物是什么? 为什么强酸性的溶液不会产生BaSO3沉淀? 高中化学 SO2通入Ba(N03)2 某探究小组的同学用H2SO4、Ba(NO3)2、NaOH、K2CO3四种溶液进行“复分... ...3↓+2HNO3,这个反应能发生吗?好像违背了强酸制弱酸的原理。大家说... 波涛滚滚是什么动物 昆明申报灵活就业补贴条件 湖南残疾人在昆明有补贴吗 云南残疾人最低生活保障未发放怎么办 我看见别人的QQ好友里有3个自己的QQ号,怎么加的啊 java中的StringBulid和StringBuffer用法,StringBuffer是线程安全的,什么情况下必须用StringBuffer? stringbuilder和stringbuffer区别是什么? stringbuffer和stringbuilder哪个线程安全 stringbuffer是线程安全的吗 怎么理解Stringbuffer 是线程安全的 stringbuilder是线程不安全的 stringbuffer线程安全吗 查询JDⅤc03637606665到哪了? 为什么StringBuffer是线程安全的? 丿Dx004866816855京东快递今天几点钟收到货呢老师? 京东快递为了业务量让我扫码寄了一个快递怎么查? 京东公众小哥快递查询单号JDVD00436322066? 证券市场的定义 证券发行市场即一级市场是指什么?? 什么叫公司的内帐和外帐? 在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连 什么叫内账昵?跟外帐一样也要做会计分录吗?跟外账有什么区别 初中孩子不上学怎么办? 初中生不上学怎么办 请问,什么是内帐,什么是外帐? 中学生不想上学怎么办 红衣身穿是什么生肖?谢谢 java stringbuilder 和stringbuffer的线程安全性 十二生肖谁是身穿? 什么生肖披身红衣呢? 关于String和StringBuffer 身穿红衣头戴冠瘦骨如柴称英雄是什么生肖 java中String 和StringBuffer有什么区别 把Win10系统装成Win7系统后,第三方软件字体很小咋办 请大神帮忙!! java中string和stringbuffer,stringbuilder的区别 身穿锦衣戴红帽是什么生肖? 身穿锦衣戴红帽是什么生肖 string stringbuffer stringbuilder说法正确的是 win7字体库损坏可以导入win10字体库吗 十二生肖哪些是红肖 String Stringbuffer和StringBuilder的区别? 猪狗穿红衣打一生肖? 怎么用手机发短信绑定QQ号 如何将win10改回win7样式 十二生肖传奇那个红衣服的魑魅是什么?最后怎么没出现呢? 12生肖角色简介