String、StringBuffer、StringBulider之间的联系和区别
首先,我们大概总体的解释一下这三者的区别和联系
String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。
StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。
StringBuilder和StringBuffer类功能基本相似,唯一的区别就是StringBuilder不是线程安全的。
下面具体看看:
1. String 类
String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。
String s = "a"; //假设s指向地址0x0001
s = "b";//重新赋值后s指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是s所指向的,s已经指向了其它地址。
因此String的操作都是改变赋值地址而不是改变值操作。
2. StringBuffer 类
StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。
每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。
StringBuffer buf=new StringBuffer(); //分配长16字节的字符缓冲区
StringBuffer buf=new StringBuffer(512); //分配长512字节的字符缓冲区
StringBuffer buf=new StringBuffer("this is a test")//在缓冲区中存放了字符串,并在后面预留了16字节的空缓冲区。
3.StringBuilder
StringBuffer和StringBuilder类功能基本相似,主要区别在于StringBuffer类的方法是多线程、安全的,而StringBuilder不是线程安全的,相比而言,StringBuilder类会略微快一点。毕竟StringBuilder不是线程安全,小号的资源也没有那么大。对于经常要改变值的字符串应该使用StringBuilder类。
4.线程安全
StringBuffer 线程安全
StringBuilder 线程不安全
5.速度
一般情况下,速度从快到慢:StringBuilder > StringBuffer > String,这种比较是相对的,不是绝对的。
6.总结
(1).如果要操作少量的数据或者是可以用final修饰的字符串用 = String
(2).单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
(3).多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
String、StringBuffer、StringBulider之间的联系和区别的更多相关文章
- java中String,StringBuffer,StringBuilder之间的区别
文章转载自:http://www.cnblogs.com/frankliiu-java/archive/2010/07/05/1771537.html String是固定长度的字符串,如果要发生变化必 ...
- String,StringBuffer,StringBulider
StringBuffer.StringBuilder.String中都实现了CharSequence接口. CharSequence是一个定义字符串操作的接口,它只包括length().charAt( ...
- String StringBuffer StringBuilder 之间的区别
StringBuffer与StringBuilder的区别: StringBuffer是jdk1.0版本出来的,线程安全,效率低 StringBuilder是jdk1.5版本出来的,线程不安全,效率高 ...
- java String, StringBuffer ,StringBulider 区别
1. String 是不可变的(immutable): 创建后不能修改: 2. StringBuffer 线程安全的,可变字符串: 3. StringBuilder 线程不安全,所以性能比较高
- String StringBuffer StringBuilder之间的区别
String:
- String StringBuffer StringBulider 详细看https://www.cnblogs.com/su-feng
主要区别:运行速度和线程安全 StringBuilder > StringBuffer > String String最慢是因为字符串常量不可改变,例如 str +“cccc” 如果 ...
- 测试String——StringBuffer——StringBulider的速度
package comnf147Package; import java.util.ArrayList; import java.util.List; public class String_Test ...
- [置顶] String StringBuffer StringBuilder的区别剖析
这是一道很常见的面试题目,至少我遇到过String/StringBuffer/StringBuilder的区别:String是不可变的对象(final)类型,每一次对String对象的更改均是生成一个 ...
- String,StringBuffer,StringBuilder的区别及其源码分析
String,StringBuffer,StringBuilder的区别这个问题几乎是面试必问的题,这里做了一些总结: 1.先来分析一下这三个类之间的关系 乍一看它们都是用于处理字符串的java类,而 ...
随机推荐
- Android开发——Fragment的简单使用总结
前言: 之前搞项目的时候,就使用了这个Fragment,中间遇到了许多坑,把坑都解决了,现在写一篇较为简单的Fragment使用总结 Fragment的简单介绍: 简单来说,Fragment其实可以理 ...
- Problems at works
1.ssh无法连接服务器:因部署ftp服务,误将/var目录的所有者和所属组改成了ftp,以致于SSH无法二次连接: 2.集群服务器的hadoop的datanode节点死亡,在对应节点拉起即可.若无法 ...
- NGUI_Font
三.NGUI中的UI字体制作 1.概述: 系统中提供的字体 比较少,而UI字体又是使用最为频繁的,不能因为单一的字体而损失用户量,则这个时候我们就可以通过Font Maker进行字体的制作. 2.动态 ...
- DBI-1.634之selectrow_array与fetchrow_array的区别
在DBI-1.634使用手册里有一个selectrow_array函数,该函数具体说明如下: This utility method combines "prepare", &qu ...
- leetCode:237 删除链表的结点
删除链表的结点 编写一个函数,在给定单链表一个结点(非尾结点)的情况下,删除该结点. 假设该链表为1 -> 2 -> 3 -> 4 并且给定你链表中第三个值为3的节点,在调用你的函数 ...
- business expressions(二)
1,to give someone a heads up = to inform someone about something important ("heads up") be ...
- nodejs文件操作模块FS(File System)常用函数简明总结(转)
件系统操作相关的函数挺多的.首先可以分为两大类. 一类是异步+回调的. 一类是同步的. 在这里只对异步的进行整理,同步的只需要在函数名称后面加上Sync即可 1. 首先是一类最常规的读写函数,函数名称 ...
- nodejs mysql 数据查询例子
1.安装nodejs 2.安装mysql npm包 地址:https://github.com/felixge/node-mysql npm install mysql 3.相应API查看及调用: ...
- DB2开发系列之四——触发器
1.触发器类型 1)BEFORE 触发器:在对表插入或更新之前执行该触发器,允许使用CALL 和 SIGNAL SQL 语句: 2)BEFORE DELETE 触发器:在删除操作之前执行该触发器: 3 ...
- [福大软工] W班 第2次成绩排行榜
作业链接 https://edu.cnblogs.com/campus/fzu/FZUSoftwareEngineering1715W/homework/866 评分细则 本次个人项目分数由三部分组成 ...