String和StringBuffer与StringBuilder的区别
1.String、StringBuffer、StringBuilder都不可以被继承,在JDK中它们都被定义为final类。
2.执行速度:StringBuilder > StringBuffer > String。String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
(一)对String对象的操作。
String str="abc";
System.out.println(str);
str=str+"de";
System.out.println(str);
运行这段代码会发现先输出“abc”,然后又输出“abcde”,过程如下:
1、JVM首先创建一个String对象str,并把“abc”赋值给str;
2、输出“abc”;
3、JVM重新创建了一个新的对象也名为str,把原来对象str的值和“de”加起来再赋值给新对象str;
4、JVM的垃圾回收机制(GC)回收原来对象str,释放所占用的资源。
所以,Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。
(二)对StringBuilder和StringBuffer对象的操作。
StringBuilder stringBuilder=new StringBuilder().append("abc").append("de");
System.out.println(stringBuilder.toString());
或者
StringBuffer stringBuffer=new StringBuffer().append("abc").append("de");
System.out.println(stringBuffer.toString());
输出结果也是“abcde”。对stringBuffer变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。
这里值得我们注意的是,对于简单的字符串选择用String会比StringBuilder和StringBuffer快。
String str="abc"+"de";
System.out.println(str);
StringBuilder stringBuilder=new StringBuilder().append("abc").append("de");
System.out.println(stringBuilder.toString());
这是因为String str="abc"+"de"操作和String str="abcde"是一样的,而不是重新创建一个对象;但是String str="abc"+"de"不能换成String str1="abc",String str2="de",String str=str1+str2,这里就是创建三个String对象进行字符串操作。
3.在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的。
如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但 StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。
4.StringBuilder和StringBuffer都有append、delete、insert这几个成员方法,他们都是通过System类的arraycopy方法来实现的,即将原数组复制到目标数组。而String则没append、delete、insert这几个成员方法。
总的来说:String:适用于少量的字符串操作的情况,StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况,StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况。
String和StringBuffer与StringBuilder的区别的更多相关文章
- String、StringBuffer与StringBuilder之间区别[全屏看文]
String.StringBuffer与StringBuilder之间区别[全屏看文] 最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,S ...
- String、StringBuffer与StringBuilder之间区别(转)
原文链接:String.StringBuffer与StringBuilder之间区别 最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,Stri ...
- String和stringbuffer和stringbuilder的区别
String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要 ...
- 自己(转)String、StringBuffer与StringBuilder之间区别
String.StringBuffer与StringBuilder之间区别 最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringB ...
- Java问题解读系列之String相关---String、StringBuffer、StringBuilder的区别
今天的题目是String.StringBuffer和StringBuilder的区别: 首先还是去官方的API看看对这三种类型的介绍吧,Go...... 一.继承类和实现接口情况 1.String类 ...
- String 和 StringBuffer,StringBuilder 的区别
String 和 StringBuffer,StringBuilder 的区别 String 是 " 字符串常量" , 对象一旦创建就不可改变,这就导致如果字符串常量池中没有所需对 ...
- Java 中 String 与 StringBuffer 和 StringBuilder 的区别
简介: String 是 Java 中很常用的类之一,同时,字符串是 Java 面试中最重要的话题之一. StringBuffer 和 StringBuilder 类提供了操作字符串的方法. 我们将研 ...
- String、StringBuffer、StringBuilder的区别
在日常开发过程中String字符串估计是被用到最多的变量了,最近看了一些String.StringBuffer和StringBuilder的东西,三者都可以对字符串进行操作,他们究竟有什么区别,以及适 ...
- java中String、StringBuffer、StringBuilder的区别
java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...
- 浅析String、StringBuffer、StringBuilder的区别以及性能区别
前奏: 比较三者之间的区别在与区别他们做相同的事情的时候的区别,那就是在我们常见的拼接字符串的时候,StringBuffer.StringBuilder调用的是appende()方法,而String很 ...
随机推荐
- Docker安装部署Mysql8(以作数据持久化)
1.创建容器并进行持久化处理 #拉取镜像 docker pull mysql:8.0.20 #启动镜像,用于拷贝配置文件到宿主机 docker run -p 3306:3306 --name mysq ...
- js的map、filter的用法
filter() 创建新数组,新数组放指定数组中符合条件的元素,满足条件的留下,是对原数组的过滤. map() 返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值,是对原数组的加工,映 ...
- (三) Mysql 之MVCC
mvcc介绍 MVCC是数据库提供并发访问控制的一种技术.其核心理念是数据快照,不同的事务访问不同版本的数据快照,从而实现不同的事务隔离级别.虽然是说具有多个版本的数据快照,但这并不意味着数据库必须拷 ...
- angular - 另一个ID为#######的进程当前正在运行ngcc
angular项目启动时报错 首先尝试npm install再次运行,看看它是否可以解决您的问题. 尝试ngcc手动运行. 删除这个文件 node_modules/@angular/compiler- ...
- 学习操作系统P3 多处理器编程:从入门到放弃 (线程库;现代处理器和宽松内存模型)
啊 啊 啊 啊 操作系统会自动把线程放置在不同的处理器上 可以用top观察CPU使用率 啊 啊 啊 啊 a 甚至连一个简单的求和程序都做不对 a 汇编语言中的 lock: CPU的特性,通过总线加锁, ...
- datagridview 标题设置背景图片
private void dgvCaozuoList_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { if (e. ...
- python基础语法学习笔记(二):表达式与运算符
1.表达式 由一个或者几个数字或者变量和运算符组合成的一行代码 通常会返回一个结果 2.运算符 由一个以上的值经过变化得到新值的过程就叫运算 用于运算的符号叫运算符 运算符分类: 算数运算符 比较或者 ...
- CS客户端 App.Config更新问题
appconfig更新必须要重启才可以 这个方法为热更新不用重新启动 public void ModifyConfig(string serverName, string dbName, strin ...
- case语法案例
case语法案例 制作nginx启停脚本 1.条件: 2.思路: 3.脚本 添加删除openvppn用户的脚本 1.实现要求 2.具体脚本 case语法案例 制作nginx启停脚本 1.条件: 启动服 ...
- if语法案例
if语法案例 1. 判断系统剩余内存 1) 脚本正文 2) 执行结果 2.监控web和数据库的方法 1) 端口监控 2) 进程监控 3) 客户端模拟 4) 数据库判断* 3.mysql数据库检测命令演 ...