java中String、StringBuffer、StringBuilder的区别

java中String、StringBuffer、StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题。现在总结一下,看看他们的不同与相同。

三者共同之处:

都是final类,不允许被继承,主要是从性能和安全性上考虑的,因为这几个类都是经常被使用着,且考虑到防止其中的参数被参数修改影响到其他的应用。

StringBuffer是线程安全,可以不需要额外的同步用于多线程中;

StringBuilder是非同步,运行于多线程中就需要使用着单独同步处理,但是速度就比StringBuffer快多了;

StringBuffer与StringBuilder两者共同之处:可以通过append、indert进行字符串的操作。

String实现了三个接口:Serializable、Comparable<String>、CarSequence

这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。

1、首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String

String最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的

2. 说线程安全

在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。

3. 总结一下 

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

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

StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Ext详解与实践》节选:自定义单元格的显示格式

有时候&#xff0c;需要在Grid中显示一个链接&#xff0c;或根据数字的大小显示不同的颜色&#xff0c;又或者使用固定格式显示记录编号等&#xff0c;这就需要自定义单元格的显示格式。在Ext的Grid可以很容易的实现自定义单元格的显示格式。在定义Grid的ColumnModel的时候&…

js学习总结----案例之多级菜单js版本

具体代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title><style>*{margin:0;padding:0;font-size:14px;}ul,li{list-style:none;}.box{margin:10px;pad…

讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当 new 的时候, 他们的执行顺序

此题考察的是类加载器实例化时进行的操作步骤&#xff08;加载–>连接->初始化&#xff09;。 父类静态变量、 父类静态代码块、 子类静态变量、 子类静态代码块、 父类非静态变量&#xff08;父类实例成员变量&#xff09;、 父类构造函数、 子类非静态变量&…

转载:成功应用ERP的思路和方法分析

企业ERP的应用现状一是应用数量。据我不完全统计&#xff0c;时至今日&#xff0c;全国有一万多家企业在集成应用ERP&#xff0c;这和国家统计局统计提供的266,090个国有及规模以上非国有企业的总数相比&#xff0c;仅占百分之四。二是应用时间。从1981年应用第一套ERP到2007年…

mysql无法找到事件id100描述_解决“事件 ID ( 487 )的描述(在资源( Zend Optimizer )中)无法找到”...

事件类型: 错误事件来源: Zend Optimizer事件种类: 无事件 ID: 487日期: 2006-8-18事件: 0:17:36用户: N/A计算机: COMPUTER描述:事件 ID ( 487 )的描述(在资源( Zend Optimizer )中)无法找到。本地计算机可能没有必要的注册信息或消息 DLL 文件来从远程计算机显示消息。您可能…

正则化线性回归

1. 模型的欠拟合、过拟合无论是回归问题还是分类问题都可能存在模型的欠拟合和过拟合的情况。下图是回归问题中的例子&#xff1a;第一个模型欠拟合&#xff0c;第二个模型刚好拟合&#xff0c;第三个过拟合。下图是分类问题中的例子&#xff1a;第一个模型欠拟合&#xff0c;第…

用过哪些Map类,都有什么区别,HashMap是线程安全的吗,并发下使用的Map是什么,他们内部原理分别是什么,比如存储方式,hashcode,扩容,默认容量等。

JAVA Map的几种类型: HashMap、HashTable、LinkedHashMap和TreeMap。 HashMap HashMap 是一个最常用的Map&#xff0c;它根据键的HashCode值存储数据&#xff0c;根据键可以直接获取它的值&#xff0c;具有很快的访问速度。 遍历时&#xff0c;取得数据的顺序是完全随机的。 …

python 线性回归回归 缺失值 忽略_python – 使用scikit-learn(sklearn),如何处理线性回归的缺失数据?...

我的数据包含2个DataFrame. DataFrame_1.shape (40,5000)和DataFrame_2.shape (40,74).我正在尝试进行某种类型的线性回归,但DataFrame_2包含NaN缺失的数据值.当我DataFrame_2.dropna(how “any”)时,形状下降到(2,74).sklearn中是否存在可以处理NaN值的线性回归算法&#xff1…

vl_sift函数用法

1 I vl_impattern(roofs1) ; 2 image(I) ;3 %vl_sift函数的输入是一个单精度的灰度图像&#xff0c;灰度值区间归一化到[0, 255]。4 %因此图像 I 需要通过下面的函数转成相应的格式&#xff1a;5 I single(rgb2gray(I)) ;6 %vl_sift( )的输出矩阵 这里f是一个[x,y,s,th]的向量…

Java面试题之有没有有顺序的Map实现类,如果有,他们是怎么实现有序的?

Hashmap和Hashtable 都不是有序的。 TreeMap和LinkedHashmap都是有序的。&#xff08;TreeMap默认是key升序&#xff0c;LinkedHashmap默认是数据插入顺序&#xff09; TreeMap是基于比较器Comparator来实现有序的。 LinkedHashmap是基于链表来实现数据插入有序的。

Photoshop的批处理(有海量的数码照片,想传上网的话就看下)

每次狂按快门的结果就是得到海量的数码照片&#xff0c;想传上网的话&#xff0c;最起码也要做一些尺寸方面的处理&#xff0c;这么多照片&#xff0c;真的要一张一张处理吗&#xff1f;Photoshop自有好用的Action工具帮我们做批处理。 一、前期准备 在图片所在文件夹里添加一个…

Python基础-包

定义&#xff1a;包本质就是一个目录&#xff08;必须带有一个__init__.py文件&#xff09;&#xff0c;它是用来从逻辑上组织模块导入包的本质&#xff1a;执行该包下的__init__.py文件导入当前目录下模块的一种方式&#xff1a;from . import module_name 其中.表示当前目录…

mysql试题错误记录字段_MySQL这三道常见的面试题,你有被问过吗?

据群友面试反馈&#xff0c;整理了3道MySQL面试题&#xff0c;对很多人可能是小菜一碟&#xff0c;对这些熟悉&#xff0c;有更好的理解的话&#xff0c;可以留言补充&#xff0c;不断完善我们的题库。MySQL查询字段区不区分大小写&#xff1f;MySQL innodb的事务与日志的实现方…

面试题,反射创建类实例的三种方式是什么

1、获得Class&#xff1a;主要有三种方法&#xff1a; &#xff08;1&#xff09;Object-->getClass &#xff08;2&#xff09;任何数据类型&#xff08;包括基本的数据类型&#xff09;都有一个“静态”的class属性 &#xff08;3&#xff09;通过class类的静态方法&am…

控制控制台

var s:string; begin AllocConsole; try Write(Type here your words and press Enter); Readln(s); ShowMessage(Format(You typed: "%s",[s])); finally FreeConsole; end; end;

推荐系统中的矩阵分解演变方式

推荐算法主要分为基于内容的算法和协同过滤. 协同过滤的两种基本方法是基于邻居的方法(基于内容/物品的协同过滤)和隐语义模型. 矩阵分解乃是实现隐语义模型的基石.矩阵分解依据用户对物品的评分, 判断出用户和物品的隐语义向量, 然后依据用户和物品的隐语义向量来进行推荐.推荐…

mysql1846错误_MySQL 错误代码:2003 idea错误:ERROR DruidDataSource:1846 - create connection error...

idea项目一启动就报错&#xff1a;20:01:13,047 ERROR DruidDataSource:1846 - create connection errorcom.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failureThe last packet sent successfully to the server was 0 milliseconds ago. The…

mac刷新本地DNS缓存

本地连网有问题&#xff0c;刷新本地dns缓存&#xff0c;刷新DNS缓存命令 sudo killall -HUP mDNSResponder

HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别(转)

HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别 文章来源&#xff1a;http://www.cnblogs.com/beatIteWeNerverGiveUp/p/5709841.html ①HashMap的工作原理 HashMap基于hashing原理&#xff0c;我们通过put()和get()方法储存和获取对象。当我们将键值对传递…

Java中Class.forName和 ClassLoader.loadClass()区别

一、类加载过程 装载&#xff1a;通过累的全限定名获取二进制字节流&#xff0c;将二进制字节流转换成方法区中的运行时数据结构&#xff0c;在内存中生成Java.lang.class对象&#xff1b; 链接&#xff1a;执行下面的校验、准备和解析步骤&#xff0c;其中解析步骤是可以选…