String,StringBuffer,StringBuilder的区别

时间:2022-12-19 18:09:35

  数据结构:

  数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。

  比如数据库就是对硬盘中的数据进行有规则的管理,可以进行增删改查工作,而良好的数据结构可以优化这些操作,

  也许大家会想这些和String,StringBuffer,StringBuilder又有什么样的关系呢?是的,这里里面存在着关系:

  首先电脑存储数据的地方有硬盘和内存条,硬盘的容量较大,并且是永久保存的(比如断电后你电脑里的下载的电影是不会消失的),

  但是硬盘的对数据的操作速度较慢;内存条的话容量小,并且是断电后就会导致失去数据的(比如你电脑上开了一个软件,电脑关机重

  启后,软件就关闭了),但是内存的对数据的操作速度快,所以CPU是直接和内存进行数据的交互的(硬盘上的数据得先读取到内存 

  中,然后再被CPU进行读取),我们的软件就是被内存条读取,然后CPU进行处理;

  如果我们在软件中有一个良好的数据结构的话,就可以提高性能,而将这些对数据进行操作的代码进行封装的话就会形成一个个框架,

  而每个框架都有自己的优点和缺点,我们要灵活的运用,扬长避短,接下来切入主题。

  String,StringBuffer,StringBuilder(都是final类,不可继承)这三个框架呢都可以对字符串进行操作,不同的是:

  String:

  String它是一个不能改变的量,比如

String name = new String("小明");//已经在内存中开辟了一块空间并装入了“小明”,再将name指向这个内存空间
name = "小星";//相当于重新开辟了一块内存空间并装入小星,然后再将name重新指向这个新的内存空间,最后jvm的GC会将原来的空间清除

  如果字符串反复修改的话,势必会造成很大消耗。

  StringBuilder:

  java就推出了StringBuilder,这个类是一个可变量,当它初始化后,再对其数据进行修改,它会在原来开辟内存上进行修改,并不会重新开辟一块空间

  但是这个类存在线程安全问题,要解决这个问题啊,于是StringBuffer站了出来.

  StringBuffer:

  它呢在他兄弟StringBuilder基础上,使用synchronized解决了线程安全问题,但因为使用了synchronized会使性能降低,所以单线程中StringBuilder运行速度比

  StringBuffer快,我截取了StringBuffer类中的部分源代码:

public synchronized int length() {
return count;
} public synchronized int capacity() {
return value.length;
} public synchronized void ensureCapacity(int minimumCapacity) {
if (minimumCapacity > value.length) {
expandCapacity(minimumCapacity);
}
} /**
* @since 1.5
*/
public synchronized void trimToSize() {
super.trimToSize();
}

  总结:

     1:如果是不太变化的字符串,可以使用String = XX(没有new开辟空间,而是保存在常量池中);速度较快;

     2:单线程中,经常变动的字符串使用StringBuilder类更好;

     3:多线程中,经常变动的字符串使用StringBuffer类更好;

     可以查看详细测试结果:http://blog.csdn.net/jessysong/article/details/54020668##1

String,StringBuffer,StringBuilder的区别的更多相关文章

  1. String,StringBuffer,StringBuilder的区别

    public static void main(String[] args) { String str = new String("hello...."); StringBuffe ...

  2. [置顶] String StringBuffer StringBuilder的区别剖析

    这是一道很常见的面试题目,至少我遇到过String/StringBuffer/StringBuilder的区别:String是不可变的对象(final)类型,每一次对String对象的更改均是生成一个 ...

  3. String,StringBuffer,StringBuilder的区别及其源码分析

    String,StringBuffer,StringBuilder的区别这个问题几乎是面试必问的题,这里做了一些总结: 1.先来分析一下这三个类之间的关系 乍一看它们都是用于处理字符串的java类,而 ...

  4. Question 20171115 String&&StringBuffer&&StringBuilder的区别与联系?

    Question 20171114 String&&StringBuffer&&StringBuilder的区别和联系 创建成功的String对象,其长度是固定的,内容 ...

  5. java中 String StringBuffer StringBuilder的区别

    * String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...

  6. 深入理解String, StringBuffer, StringBuilder的区别(基于JDK1.8)

    String.StringBuffer.StringBuilder都是JAVA中常用的字符串操作类,对于他们的区别大家也都能耳熟能详,但底层到底是怎样实现的呢?今天就再深入分析下这三种字符串操作的区别 ...

  7. Android/Java 中的 String, StringBuffer, StringBuilder的区别和使用

    Android 中的 String, StringBuffer 和 StringBuilder 是移动手机开发中经常使用到的字符串类.做为基础知识是必须要理解的,这里做一些总结. A.区别 可以从以下 ...

  8. 在JAVA中,String,Stringbuffer,StringBuilder 的区别

    首先是,String,StringBuffer的区别 两者的主要却别有两方面,第一是线程安全方面,第二是效率方面 线程安全方面: String  不是线程安全的,这意味着在不同线程共享一个String ...

  9. String,StringBuffer,StringBuilder三者区别

    String:每次改变,String都会重新构造,内存指针都会改变 StringBuffer:主要用在全局变量中 StringBuilder:在线程内完成字符拼接,因为线程是不安全的,所以完成后可以丢 ...

  10. 从源码看String,StringBuffer,StringBuilder的区别

    前言 看了一篇文章,大概是讲面试中的java基础的,有如题这么个面试题.我又翻了一些文章看了下,然后去看源码.看一下源码大概能更加了解一些. String String类是final的,表示不可被继承 ...

随机推荐

  1. 变形--位移 translate()

    translate()函数可以将元素向指定的方向移动,类似于position中的relative.或以简单的理解为,使用translate()函数,可以把元素从原来的位置移动,而不影响在X.Y轴上的任 ...

  2. js 正则 数值验证

    function checkTextDataForNORMAL(strValue) { // 特殊字符验证格式 var regTextChar = /([\*"\'<>\/])+ ...

  3. motan源码分析十:流量切换

    motan提供了流量切换的功能,可以实现把一个group的流量切换到另一个group(一个或多个服务都可以).大家可以使用tomcat部署motan的管理工具,并设置几个组,例如可以参考demo代码: ...

  4. LINQ的用法

    http://www.cnblogs.com/liulun/archive/2013/02/26/2909985.html(转载)

  5. 关于Class&period;forName&lpar;className&rpar;&period;newInstance&lpar;&rpar;介绍

    Class.forName(xxx.xx.xx) 返回的是一个类 首先你要明白在java里面任何class都要装载在虚拟机上才能运行.这句话就是装载类用的(和new 不一样,要分清楚). 至于什么时候 ...

  6. python&lowbar;virtualenvwrapper安装与使用

    如何创建当前python版本虚拟环境? 1. 安装virtualenv pip install -i https://pipy.doubanio.com/simple virtualenv 2. 创建 ...

  7. xampp——apache服务启动问题(端口占用)

    Apache启动提示 20:39:02 [Apache] Error: Apache shutdown unexpectedly.20:39:02 [Apache] This may be due t ...

  8. python之路--网络编程之socket

    一 . 网络编程 CS架构 客户端服务端架构 服务端:提供服务的 客户端:享受服务的 BS架构:浏览器和服务端 网络通信流程: 集线器:将所有连接上它的电脑全部联通起来 交换机:升级版的集线器 网卡: ...

  9. python:a&plus;&equals;b 和a&equals;a&plus;b&quest; 基础数据类型也不能乱用

    python:a+=b 不等于a=a+b? a+=b 调用的是__iadd__方法,但是a+b调用的是__add__方法.对于自定义的对象,我们通过覆盖两个方法来实现+=和+操作,但是基础数据类型呢? ...

  10. LCD显示异常分析——撕裂&lpar;tear effect&rpar;【转】

    转自:LCD显示异常分析--撕裂(tear effect) 概述 在上一篇<LCD显示异常分析--开机闪现花屏>中,我们一起分析了开机花屏的问题,在这一篇中,我将对LCD撕裂(tear e ...