java.lang.String、java.lang.StringBuffer、java.lang.StringBuilder都是字符串类型,是Java中用于处理字符串常用的三个类。它们主要有以下区别和联系:

联系(相同之处):

三者都是final类,不允许被继承。

由于使用频繁,考虑到性能和安全的原因,防止其中的参数被参数修改影响到其他的应用。

区别

1)String类是不可变类

String对象一旦被创建,则包含在这个对象中的字符序列是不可更改的,直到这个对象被销毁。

String实现了三个接口:java.io.Serializable、Comparable<String>、CharSequence

2)StringBuffer类代表一个字符序列可变的字符串

StringBuilder可以通过append、insert、reserve、setCharAt、setLength等方法改变其内容。一旦生成了最终的字符串,调用toString方法将其转变为String类型。

3)JDK1.5新增了一个StringBuilder类,与StringBuilder类似,构造方法和方法基本相同。

不同的是StringBuffer是线程安全的,可以不需要额外的同步用于多线程中;StringBuilder是线程不安全的,运行于多线程中就需要使用单独同步处理,但速度比不上StringBuilder,所以StringBuilder性能略高。在不考虑线程安全的情况下,优先考虑使用StringBuilder。

StringBuilder只实现了两个接口java.io.Serializable、CharSequence,相比之下String的实例可以通过compareTo方法进行比较,其他不可以。

三者的运行速度:StringBuilder > StringBuffer > String。

小结

1)String:适用于少量的字符串操作的情况。

2)StringBuffer:适用于单线程下在字符缓冲区进行大量操作的情况。

3)StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况。

String StringBuffer StringBuilder区别与联系的更多相关文章

  1. 转:String StringBuffer StringBuilder区别

    转自:http://www.iteye.com/topic/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论.还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸 ...

  2. String&StringBuffer&StringBuilder区别

    String  String类是final类故不可以继承,也就意味着String引用的字符串内容是不能被修改.String有两种实例化方式:    (1)直接赋值(例中,String str = &q ...

  3. String,StringBuffer,StringBuilder区别

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  4. Java中String/StringBuffer/StringBuilder区别(转)

    1.三者在执行速度方面的比较:StringBuilder >  StringBuffer  >  String 2.String <(StringBuffer,StringBuild ...

  5. Java学习之String StringBuffer StringBuilder区别

    1.String:对象长度是不可变的,是线程安全. 2.StringBuffer:对象长度是可变的,是线程安全. 3.StringBuilder:对象长度是可变,不是线程安全.

  6. String,StringBuffer,StringBuilder区别(笔记)

    String类被final修饰,创建的对象为不可变对象,属于字符串常量. 而StringBuffer与StringBuilder创建的属于字符串常量. StringBuffer的方法大多用了Synch ...

  7. java中string , StringBuffer , StringBuilder 区别

    1.String String变量的值不能改变,如果要改变String变量的值,虚拟机首先会遍历方法区中的字符串常量,如果存在需要的值,则虚拟机直接把此常量值的地址分配给String变量,如果不存在这 ...

  8. String StringBuffer stringbuilder 区别

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 字符串类 ,长度不可变. 字符串缓存器类, 长度可变, 线程安全, 字符串构造器类,长度 ...

  9. 【Java基础】String StringBuffer StringBuilder

    String String是不可变的 我们都知道String不是基本数据类型,而是一个对象,并且是final类型的,不可变的.(public final class String) 查看以下代码: S ...

随机推荐

  1. bytes和bytearray总结

    The core built-in types for manipulating binary data are bytes and bytearray. They are supported by ...

  2. 51 Nod 大鱼吃小鱼

    1289 大鱼吃小鱼  题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 有N条鱼每条鱼的位置及大小均不同,他们沿着X轴游 ...

  3. poj 2010 Moo University - Financial Aid 最大化中位数 二分搜索 以后需要慢慢体会

    Moo University - Financial Aid Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 6599   A ...

  4. 捕获有问题的SQL

  5. 51nod11443-路径和树(图论,最短路,最小生成树)

    1443 路径和树 题目来源: CodeForces 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 关注 给定一幅无向带权连通图G = (V, E) ...

  6. sklearn.model_selection Part 1: Splitter Classes

    1. GroupKFold(_BaseKFold) 主要参数: n_splits : int, default=3 在GroupKFold.split(X[, y, groups])中会调用下面的方法 ...

  7. idea 下运行安卓项目

    修改 gralde 路径修改安卓sdk路径进入project structure 设置 Project settings / Project /project SDK 选择 Android API 2 ...

  8. C++入门经典-例6.15-通过字符串函数连接两个字符数组

    1:代码如下 // 6.15.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...

  9. T83310 【音乐会】二重变革

    T83310 [音乐会]二重变革 题解 你看数据那么大,又是一道数学题 题面描述这么个代码肯定不能傻fufu的直接把代码提交上去 我批评我自己 观察代码当中有一行 也就是说明最后这个数列都将变成同一个 ...

  10. CSS样式属性单词之Left

    通常left单独在CSS中设置无效,需要在使用position属性下使用才能生效起作用.left左靠多少距离(距离左边多少)的作用. left 一.left认识与语法 left翻译:左边,左 在CSS ...