String、StringBuilder和StringBuffer

1、string不可变性

java的docs有这样一句话:Strings are constant; their values cannot be changed after they are created。

对Java的String类而言,核心的一个域就是一个char数组,内部就是通过维护一个不可变的char数组,来向外部输出的。比如进行进行字符的提取、子字符串的提取等等。

1 public static void main(String[] args){
2    String a="hello";
3    print a;
4    Sting b =a.toUpperCase();
5    print b;
6    print a;
7 }

上面这段代码的输出结果分别是hello,HELLO,hello。说明了String的不可变性。事实上,在String进行参数传递的时候,都是复制引用传递,而String对象一直在某个物理地址,没有发生任何变化。指向这个Sring对象的任何引用都无法改变它的值。

2、StringBuilder和StringBuffer的使用

String具有不可变性,在我们需要可变String的时候,可能会带来效率问题。比如我现在需要向String对象后面加多个“0”,那么每加一个“0”都会产生一个中间对象。因此具有可变性的StringBuilder就有了用武之地。

StringBuilder str = new StringBuilder();//空
StringBuilder str = new StringBuilder("start")//str初始化为“start”

  StringBulider提供了很多有用的方法,比如append和insert。假设存在StringBulider对象 str=“start”,str.append(on),那么str=“starton”,str.insert(4,"on"),那么str=“staront”。一般而言,对于字符串str,str.append(x)和str.insert(str.length(),x)是等价的。

   StringBuffer和StringBuIlder的功能基本相同。一般使用StringBuIlder,因为StringBuIlder速度更快。但是,需要注意的是 stringBuilder在多线程中是不安全的。一般在多线程中使用StringBuffer。

时间: 2024-10-26 22:06:55

String、StringBuilder和StringBuffer的相关文章

String, StringBuilder及StringBuffer的区别

在java中,String, StringBuilder及StringBuffer经常被用来处理字符串操作. 下表列出它们的异同点: String StringBuffer StringBuilder 是否可继承 否(final) 否(final) 否(final) 是否长度可变 否 是 是 是否线程安全 ---------- 是 否 拼接效率 低 中 高 一般情况下,使用String,StringBuilder比较多.因为字符串的拼接很少会涉及到多线程,所以StringBuffer用的较少.先

String, StringBuilder 与StringBuffer的区别与联系

1.区别 (1)String构建的对象不能改变,每次对String进行操作时,如两个String相加,需要新建一个String对象,然后容纳最终的结果. 而StringBuilder与StringBuffer构建的对象可以随时在修改其内容,而无需生成新的对象.一般新建一个对象是会生成16个字节的空间,之后根据需要再增加空间. 由于一般新构建一个对象涉及分配内存空间分配.无引用对象过多时的垃圾回收等,因此,对于操作频繁的字符串需使用StringBuilder或StringBuffer. (2)St

CharSequence,String ,Stringbuilder和StringBuffer源码分析

1.从类的定义看CharSequence.StringBuffer.StringBuilder.String的关系 下面先贴上这四者的定义(来自JDK1.6) CharSequence是一个定义字符串操作的接口,StringBuffer.StringBuilder.String中都实现了这个接口. //CharSequence定义 public interface CharSequence //StringBuffer定义 public final class StringBuffer exte

String,StringBuilder 和StringBuffer区别

1. String 和字符串缓冲区的区别是: String 是一个不可变的字符序列 , 而字符串缓冲区是可变的 2. StringBuffer 是一个线程安全的可变字符序列 ; 线程安全对应的效率低 ; 3. StringBuilder 线程不安全的可变字符序列 ; 线程不安全对应的效率高 ;

java学习系列之二---字符串(char.String.StringBuilder以及StringBuffer)

一.String 1.String:字符串常量,字符串长度不可变.Java中String是immutable(不可变)的.String类是被final修饰 2.String str="hello world"和String str=new String("hello world")的区别 public class Main {              public static void main(String[] args) {         String s

String、StringBuilder、StringBuffer 和CharSequence的区别

String简介: String 是java中的字符串,它继承于CharSequence. CharSequence简介: CharSequence是一个接口,它只包括length(),charAt(int index), subSequence(int start, int end)这几个API接口 String.StringBuffer.StringBuilder和CharSequence 关系String 继承于CharSequence,也就是说String也是CharSequence类型

Java中的String,StringBuilder,StringBuffer三者的区别

最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下,便于大家观看,也便于加深自己学习过程中对这些知识点的记忆,如果哪里有误,恳请指正. 这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面. 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String String

JDK 1.8 源码解析 String、StringBuilder和StringBuffer的异同

JDK提供了String.StringBuilder和StringBuffer这三个类来处理字符串,其中StringBuilder类是在JDK 1.5中新增的. 不同点如下: 1 是否有父类 String没有父类. // String类不能被继承 // 实现了Serializable.Comparable和CharSequence(字符序列)接口 public final class String implements java.io.Serializable, Comparable<Strin

[转载]Java中的String,StringBuilder,StringBuffer三者的区别

最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下,便于大家观看,也便于加深自己学习过程中对这些知识点的记忆,如果哪里有误,恳请指正. 这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面. 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String String

(转)String,StringBuilder,StringBuffer区别

Java中的String,StringBuilder,StringBuffer三者的区别 注:转自-博客园-酥风 最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下,便于大家观看,也便于加深自己学习过程中对这些知识点的记忆,如果哪里有误,恳请指正. 这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面. 首先说运行速度,或者说是执行速度,