String和StringBuffer的区别 String: 是对象不是原始类型。 为不可变对象,一旦被创建,就不能修改它的值。...StringBuffer: 是一个可变对象,当对它进行修改的时候不会像String那样重新建立对象。...它只能通过构造函数来建立,StringBuffer subffer=new StringBuffer(); 对象被建立以后,在内存中就会分配内存空间,并初始保存一个null,通过它的append方法向其赋值...subffer.append(“hello word”); 字符串连接操作中StringBuffer的效率要明显比String高; String对象是不可变对象,每次操作String都会建立新的对象来保存新的值...StringBuffer对象实例化后,只对这一个对象操作。
故 String str1 = "hello world"; String str2 = new String("hello world"); String str3 = "hello world";...; } StringBuffer @Override public synchronized StringBuffer append(Object obj) { toStringCache...synchronized StringBuffer append(String str) { toStringCache = null; super.append(str...所以,在大量相加字符串面前,不管是StringBuilder还是StringBuffer,性能都比String要好。 StringBuilder与StringBuffer对比。...所以,StringBuffer是线程安全的。
首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String String最慢的原因: String为字符串常量,而StringBuilder...和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。...而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。 ...再来说线程安全 在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的 如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer...总结一下 String:适用于少量的字符串操作的情况 StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况 StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
这篇文章主要介绍另外两个常用的类 StringBuilder 和 StringBuffer 的特性。 我们知道 String 是不可变的 (Immutable),字符串的操作会产生新对象,消耗内存。...为此,JDK 提供了 StringBuffer 和 StringBuilder 两个类。...StringBuffer 和 StringBuilder 都实现了 AbstractStringBuilder 抽象类,拥有几乎一致对外提供的接口;它们底层在内存中的存储方式与 String 相同, 都是以一个有序的字符序列进行存储...其中,StringBuffer 的线程安全是通过在 synchronize 关键字实现,为此,StringBuffer 的性能远低于 StringBuilder。...最后简单总结下各自的应用场景: 1、在字符串内容不经常发生变化的业务场景优先使用 String 类。 2、在频繁进行字符串的操作,并且需要考虑线程安全的情况下,建议使用 StringBuffer。
可变性 简单的来说:String 类中使用 final 关键字修饰字符数组来保存字符串,private final char value[],所以 String 对象是不可变的。...线程安全性 String 中的对象是不可变的,也就可以理解为常量,线程安全。...性能 每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象。...StringBuffer 每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。...对于三者使用的总结: 操作少量的数据: 适用String 单线程操作字符串缓冲区下操作大量数据: 适用StringBuilder 多线程操作字符串缓冲区下操作大量数据: 适用StringBuffer (
,最后用toString方法转化为String对象,总结起来就是一个StringBuffer对象和String对象的消耗(2个)。...对于String 类和 StringBuffer 类,字符在字符串中的索引位置都从0开始。...String和StringBuffer主要区别: String类的内容一旦声明后是不可改变的,改变的只是其内存的指向,而StringBuffer类的对象内容是可以改变的(String对象不可修改指的是对象本身不可修改...StringBuffer类的toString方法返回一个以当前StringBuffer的缓冲区中的所有字符串为内容的新的String对象的引用。...String 对象可以用 操作符 “+ “进行连接,StringBuffer不能。
字符串在编程中使用的非常频繁,同时又是面试中的常见题型,那么我们的对字符串相关类String,StringBuilder,StringBuffer的理解真的正确吗?...目录 String概述 StringBuilder 和StringBuffer 异同 性能比较 结论 扩展(详细源码阅读及方法解析) String概述 ?...StringBuilder和StringBuffer 既然已经有了String这个功能完备的嘞,那么为什么还需要StringBuilder和StringBuffer呢?...异同 从上面的一些源码中可以简单分析出String,StringBuilder,StringBuffer的一些异同点,如下: String是常量,不可改变,StringBuffer、StringBuilder...StringBuffer进行了50000的字符串拼接操作(String使用+方法,其他两个类使用append方法),每次拼接的值为当前循环的数字。
String 字符串常量,字符串长度不可变,每次对String的操作都会产生一个新的对象。不仅效率低下,而且大量浪费有限的内存空间。 StringBuffer 是线程安全的字符串变量。...如果要使结果变为String类型,可以调用Stringbuffer的toString方法。...每个Stringbuffer对象都有一定的缓冲区容量,当字符串大小没有超过缓冲区容量时,不会分配新的容量,当大小超过时,会自动增加容量。...StringBuilder是线程不安全的字符串变量,Stringbuilder和 Stringbuffer类功能基本相似,主要区别在于,Stringbuffer是线程安全的,Stringbuilder是线程不安全的...速度一般从小到大为String 、StringBuffer、StringBuilder。 String:适合用于操作少量数据时 StringBuffer:适合用于多线程字符串缓冲区下操作大量数据。
String、StringBuilder、StringBuffer 三个类源自JDK的 java/lang/ 目录下: String 字符串常量 StringBuffer 字符串变量(线程安全...) StringBuilder 字符串变量(非线程安全,JDK 5.0(1.5.0) 后支持) String 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String...所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,而特别是以下的字符串对象生成中, String 效率是远要比 StringBuffer 快的: String S1 =...; String S4 = “ test”; String S1 = S2 +S3 + S4; 这时候 JVM 会规规矩矩的按照原来的方式去做 在大部分情况下: StringBuffer > String...、StringBuffer、String 的区别 Java 之 String 类型
String vs StringBuffer vs StringBuilder 本文翻译自:https://www.digitalocean.com/community/tutorials/string-vs-stringbuffer-vs-stringbuilder...然后比较StringBuffer和StringBuilder类。 String in Java 字符串类表示字符串,我们可以用两种方式实例化字符串。...String str = "ABC"; // or String str = new String("ABC"); 字符串在Java中是不可变的。因此,它适用于多线程环境。...String vs StringBuffer vs StringBuilder 字符串是不可变的,而StringBuffer和StringBuilder是可变的类。...参考文献: String API Doc StringBuffer API Doc StringBuilder API Doc
补充: (1) String的创建机理 由于String在Java世界中使用过于频繁,Java为了避免在一个系统中产生大量的String对象,引入了字符串常量池。...2 StringBuffer/StringBuilder StringBuffer和StringBuilder都实现了AbstractStringBuilder抽象类,拥有几乎一致对外提供的调用接口;其底层在内存中的存储方式与...String相同,都是以一个有序的字符序列(char类型的数组)进行存储,不同点是StringBuffer/StringBuilder对象的值是可以改变的,并且值改变以后,对象引用不会发生改变;两者对象在构造过程中...可参看Java标准类库的源代码,StringBuffer类中方法定义前面都会有synchronize关键字。为此,StringBuffer的性能要远低于StringBuilder。...StringBuffer StringBuffer 是一个munitable 类也就是说他是可变的,为什么说可变,StringBuffer 的append方法在拼接字符串的时候不会创建新的对象,而是在原有的对象上增加字符串
(buf, true); } 从源码可以看出,任何操作都是创建一个新的对象,不影响原对象 StringBuffer和StringBuidler 初始容量 StringBuilder和StringBuffer...append(StringBuffer sb) { toStringCache = null; super.append(sb); return this...; } public synchronized StringBuffer append(String str) { toStringCache = null;...super.append(str); return this; } public StringBuilder append(StringBuffer sb) {...是线程安全的 使用StringBuilder和StringBuffer的时候最好初始化一个合适的容量,因为如果默认容量不够的话,会重新创建一个char数组,再进行复制 字符串相加的时候,直接相加的时候,
String: 1.String创建的对象是不可变的,一旦创建不可改变 2.对象值可以改变其实是创建了一个新的对象,然后把新的值保存进去(如图1) 3.String类被final修饰,不可以被继承...4.String创建的对象的值存在于常量池,不用的时候不会被销毁 5.String运行时间较长 6.String适用于比较短而小的字符串 图1 StringBuffer: 1.StringBuffer...创建的对象是可变的 2.它的改变不像String那样重新创建对象,而是通过构造方法(如图2) 3.StringBuffer创建的对象的值存在于栈区,不用的时候会被销毁 4.StringBuffer...运行时间较短 5.StringBuffer适用于比较长的字符串、比较多的字符串 图2 接下来用代码来测试String和StringBuffer运行时的区别 package com.feisi.test...运行的时间:"+(end2-start2)); } } 运行结果如图: 总结: 今天学习了String与StringBuffer的区别,也额外收获了一些其他的知识,比如: 1.字符串加数字打印出来还是字符串
面试题:String为什么不可变 StringBuffer和StringBuilder的区别 String 和StringBuffer的区别: (一):String 类中的byte数组使用final修饰的...而StringBuffer没有 从而说明 String类的一旦创建 就不可更改 而StringBuffer的可以 用法:
String、StringBuilder、StringBuffer String Immutable类,被声明为final class,所有的属性也都是final的,原生就是线程安全的,特性如上述,...所以String的操作效率往往对使用率有影响,针对常量池的优化。...当2个String对象拥有相同的值时,他们只引用常量池中的同一个拷贝。...append或者add方法将字符串添加到原序列的末尾或指定位置,长度是16+Str.length,完成后StringBuffer调用toString方法才会变成一个String,StringBuffer...解决了String在拼接中效率不高的问题。
); //也可以使用指定的字符编码 System.out.println(str); //AB12 9、深入理解StringBuffer和StringBuilder StringBuffer、StringBuilder...和String类似,底层也是用一个数组来存储字符串的值,并且数组的默认长度为16,即一个空的StringBuffer对象数组长度为16。...StringBuffer和StringBuilder中常用的方法: StringBuffer append(xxx):拼接字符串 StringBuffer delete(int start,int end...):删除指定范围的内容,左开右闭 StringBuffer replace(int start, int end, String str):替换指定范围的内容 StringBuffer insert(int...相同点:底层都是通过char数组实现的 不同点: String对象一旦创建,其值是不能修改的,如果要修改,会重新开辟内存空间来存储修改之后的对象;而StringBuffer和StringBuilder
概要 String、StringBuffer、StringBuilder是常用的字符序列,从源码上对比下,三者的区别 类结构 String StringBuffer StringBuilder...String buffers support mutable strings.Because String objects are immutable they can be shared StringBuffer...* A string buffer is like a {@link String}, but can be modified....总结 String 初始化后不可修改,StringBuilder、StringBuffer支持修改。...操作少量的数据或者常量使用 String 单线程操作字符串缓冲区下操作大量数据,使用StringBuilder 多线程操作字符串缓冲区下操作大量数据,使用StringBuffer 性能严格要求的场景下,
2 String s2 = new String("Hello"); 3 4 String s3 = "Hello"; 5 String...其次,String、StringBuffer、StringBuilder三者中 ,就运行速度而言,StringBuilder最高,StringBuffer次之,最后是String。...造成这种情况的原因是String是由final修饰的字符串常量,而StringBuffer和StringBuilder是字符串变量,即字符串常量一旦创建之后就无法改变,(但实际应用中我们是经常在改变它的值...因为在StringBuffer中,有很多方法是被synchronized关键字修饰的(因此也就限制了它的性能),所以如果在多线程应用时,应尽量使用StringBuffer从而保证线程安全,避免一些不必要的错误...因为String的+操作实际是调用了StringBuffer的append方法进行,然后又通过StringBuffer的toString()操作重新赋值的。
一、String转化为StringBuffer类 方法一:使用StringBuffer类的构造方法,public StringBuffer(String str) public class Person...{ public static void main(String[] args) { String str ="hello world"; StringBuffer buf = new StringBuffer...Person { public static void main(String[] args) { String str ="hello world"; StringBuffer buf...= new StringBuffer(str); System.out.println(buf); } } 二、StringBuffer转化为String 利用StringBuffer类的toString...()方法完成 public class Person { public static void main(String[] args) { StringBuffer buf=new StringBuffer
String String是一个不可变类,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。 有关String更详细的介绍,请看这篇文章每天都在用String,你真的了解吗?...StringBuffer StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append()、insert()、reverse...一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()方法将其转换为一个String对象。...我们可以看一下StringBuffer中的方法,用了synchronized关键字修饰,所以是线程安全的 总结 1、速度方面 StringBuilder > StringBuffer > String...2、线程安全 StringBuilder(非线程安全),StringBuffer(线程安全的) 3、使用场景 String:适用于少量的字符串操作。
领取专属 10元无门槛券
手把手带您无忧上云