stringbuffer和stringbuilder是什么,String,StringBuffer,StringBuilder区别
Stringbuffer stringbuilder:它们之间的区别
String是定长字符串,如果发生变化,必须重新生成新的实例;
串常数
StringBuffer字符串变量(线程安全)
StringBuilder字符串变量(非线程安全)
简而言之,String类型和StringBuffer类型的主要性能差异在于String是一个不可变的对象。
但是,如果使用StringBuffer类,结果会有所不同。每次结果都会对StringBuffer对象本身进行操作,而不是生成一个新的对象并改变对象引用。因此,一般情况下,我们建议使用StringBuffer,尤其是在字符串对象频繁变化的情况下。在一些特殊情况下,string对象的字符串拼接实际上被JVM解释为StringBuffer对象的拼接,所以这些时候String对象的速度并不比StringBuffer对象慢,特别是在下面的String对象生成中,String的效率远远快于StringBuffer:
字符串S1="这只是一个" "简单" "的测试";
string buffer Sb=new StringBuilder("这只是一个")。append(“简单”)。append(" test ");
你会惊讶地发现,生成字符串S1对象的速度简直太快了,而此时StringBuffer根本不占优势。这其实是JVM的一个小把戏。在JVM看来,这
字符串S1="这只是一个" "简单" "的测试";实际上,它是:
字符串S1="这只是一个简单的测试";所以当然不会花太多时间。但是这里你要注意,如果你的字符串是来自另一个字符串对象,速度就没那么快了,比如:
字符串S2="这只是一个";
字符串S3="简单";
字符串S4="测试";
弦S1=S2 S3 S4;
此时,JVM将按照原来的方式运行。
在大多数情况下,StringBuffer字符串
字符串缓冲器
Java.lang.StringBuffer线程安全变量字符序列。类似于string的Stringbuffer区域,但不能修改。尽管它在任何时间点都包含一个特定的字符序列,但是该序列的长度和内容可以通过一些方法调用来改变。
Stringbuffer可以安全地用于多线程。必要时可以同步这些方法,因此任何特定实例上的所有操作看起来都是按顺序发生的,这与每个相关线程进行方法调用的顺序是一致的。
StringBuffer上的主要操作是append和insert方法,它们可以被重载以接受任何类型的数据。每种方法都可以有效地将给定的数据转换成字符串,然后将字符串的字符追加或插入到stringbuffer区域。append方法总是将这些字符添加到缓冲区的末尾;insert方法在指定点添加字符。
比如Z引用一个stringbuffer area对象,其当前内容为“start”,这个方法调用z.append(le )会使stringbuffer area包含“sketcher”,而z.insert(4, le )会将stringbuffer area改为包含“starlet”。
Java.lang.StringBuilder可变字符序列是5.0中的新功能。这个类提供了一个与StringBuffer兼容的API,但是不能保证同步。这个类被设计为StringBuffer的简单替换,由stringbuffer区域中的单个线程使用(这种情况很常见)。如果可能的话,建议首先采用这个类,因为在大多数实现中它比StringBuffer快。两种方法基本相同。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。