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:适用多线程下在字符缓冲区进行大量操作的情况。
转载于:https://www.cnblogs.com/lxjy201832/p/8677437.html
String和StringBuffer与StringBuilder的区别相关推荐
- php 有 stringbuffer,string,stringbuffer以及stringbuilder的区别
string,stringbuffer以及stringbuilder的区别? 小编在一次电话面试中,被问过StringBuilder是线程安全的吗,脱口而出是安全的,结果人家质疑我你是2年开发经验吗. ...
- JavaSE(二十五)——String与StringBuffer、StringBuilder的区别、创建对象的几种方法、Http和Https的区别
文章目录 1. String与StringBuffer.StringBuilder的区别 2. Java创建对象的几种方法 3. Http和Https的区别 1. String与StringBuffe ...
- String、StringBuffer和StringBuilder的区别
String.StringBuffer和StringBuilder的区别: 文章目录 String StringBuffer StringBuilder StringBuffer是如何实现线程安全的呢 ...
- Java中String、StringBuffer、StringBuilder的区别
Java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...
- String、StringBuffer与StringBuilder之间区别 (转载)
最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下. 关于这三个类在字符串处理中的位置不言而喻,那 ...
- Java 之String、StringBuffer 和 StringBuilder 三者区别介绍
String:字符串常量,字符串长度不可变,StringBuffer:字符串变量(Synchronized,即线程安全),StringBuilder:字符串变量(非线程安全). String Stri ...
- 【转】Java:String、StringBuffer和StringBuilder的区别
1 String String:字符串常量,字符串长度不可变.Java中String是immutable(不可变)的. String类的包含如下定义: [java] view plaincopy /* ...
- JAVA中String与StringBuffer 、StringBuilder的区别
String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...
- String、StringBuffer 、StringBuilder 的区别(转)
String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要 ...
- Java 源码出发彻底搞懂String与StringBuffer和StringBuilder的区别
导读 在Java中数据类型分为基本数据类型与引用数据类型.其中String属于引用类型,也是最常见的一种类型.但是我们对于String了解多少呢?String对象的内存地址?如何创建String对象? ...
最新文章
- 常见Jvm面试题总结及答案整理 120道(持续更新)
- 怎么知道文本前后空格的字符格式_JDK 14的新特性:文本块Text Blocks
- Windows 2003 系统管理 视频教程 http://www.91xueit.comm 下载
- “不差钱”华为刷屏 拟募资60亿!
- 接入微信分享过程的喜和泪
- c#中类的简单使用学习
- idesk卸载教程_iDesk助手使用帮助
- java课程设计通讯录_java课程设计(通讯录管理软件源代码)
- seckill配置补发
- css3实现图片旋转木马效果
- Borland 26年风雨路
- 【一次过】左旋转字符串
- 关于oracle预言机
- 计算机如何删除已连接的打印机驱动程序,怎么删除网上共享的打印机驱动程序...
- 黑马粉丝感叹:好可呀,好想要!!【最新福利你还没领?】
- oa系统服务器价格,oa软件系统价格
- 2017乌鲁木齐区域赛D题Fence Building
- oracle 存储过程返回,Oracle 存储过程返回结果集 (转)
- HTML——css与js案例练习
- HEIC图片如何快速转换格式