String、StringBuffer和StringBuilder类区别分析

news/2024/7/10 22:45:26 标签: 开发语言, java, jquery

Java提供了String、StringBuffer和StringBuilder类来封装字符串,并提供了一系列操作字符串对象的方法。

它们的相同点是都用来封装字符串;都实现了CharSequence接口。它们之间的区别如下:

一、可变与不可变

String类是一个不可变类,即创建String对象后,该对象中的字符串是不可改变的,直到这个对象被销毁。StringBuffer与StringBuilder都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,是可变类。

由于String是可变类,适合在需要被共享的场合中使用,当一个字符串经常被修改时,最好使用StringBuffer实现。如果用String保存一个经常被修改的字符串,该字符串每次修改时都会创建新的无用的对象,这些无用的对象会被垃圾回收器回收,会影响程序的性能,不建议这么做。

二、初始化方式

当创建String对象时,可以利用构造方法String str = new String("demo")的方式来对其进行初始化,也可以直接用赋值的方式String s = "demo"来初始化。而StringBuffer只能使用构造方法StringBuffer sb = new StringBuffer("hello world")的方式初始化。

三、字符串修改方式

String字符串修改方法是首先创建一个StringBuffer,其次调用StringBuffer的append方法,最后调用StringBuffer的toString()方法把结果返回,示例代码如下:

javascript">String cat = "miaomiao";
cat+= "demo";

以上代码等价于下面的代码:

javascript">StringBuffer dog = new StringBuffer(cat);
dog.append("demo01");
cat = dog .toString();

上述String字符串的修改过程要比StringBuffer多一些额外操作,会增加一些临时的对象,从而导致程序的执行效率降低。stringBufferStringBuilder在修改字符串方面比String的性能要高。

四、是否实现了equals和hashCode方法

String实现了equals()方法和hashCode()方法。

而StringBuffer没有实现equals()方法和hashCode()方法,将StringBuffer对象存储进Java集合类中会出现问题。

五、是否线程安全

StringBuffer与StringBuilder都提供了一系列插入、追加、改变字符串里的字符序列的方法,它们的用法基本相同,只是StringBuilder是线程不安全的,StringBuffer是线程安全的。如果只是在单线程中使用字符串缓冲区,则StringBuilder的效率会高些,但是当多线程访问时,最好使用StringBuffer。

综上,在执行效率方面,StringBuilder最高,StringBuffer次之,String最低。总的来说,如果要操作的数量比较小,先使用String类;如果是在单线程下操作大量数据,先使用StringBuilder类;如果是在多线程下操作大量数据,先使用StringBuilder类。


http://www.niftyadmin.cn/n/1854870.html

相关文章

八:The YARN Timeline Server

一、Overview 介绍yarn timeline server用于存储和检查应用程序过去和现在的信息(比如job history server)。有两个功能:1.Persisting Application Specific Information 保存应用程序特定的信息收集和检索应用程序或者框架的特定信息。如装mr任务的map\reduce数量通…

IDEA lombok插件的安装(快速安装)和常用注解介绍

首先添加maven依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.8</version><scope>provided</scope> </dependency>开始安装插件 1、CtrlAltS打开设置选项…

转 Pycharm及python安装详细教程

转 &#xff1a; http://blog.csdn.net/qq_29883591/article/details/52664478 首先我们来安装Python 1、首先进入网站下载&#xff1a;点击打开链接&#xff08;或自己输入网址https://www.python.org/downloads/&#xff09;&#xff0c;进入之后如下图&#xff0c;选择图中红…

屏幕坏点检测图片_如何分辨智能电视屏幕的好坏?掌握这三招,自己也能轻松检测...

大家都知道一句话:“买电视就是买屏”虽然这句话有些片面了,不是很正确,但是也从侧面验证了电视屏幕的重要性。然而在选购了新的电视机后,我们该如何保证拿到手的这台电视屏幕质量是过关的呢?没有专业测试工具的用户又该如何对电视进行屏幕测试呢?今天小编就和大家来分享一下…

公用的update

包结构&#xff1a; jdbc.properties路径&#xff1a;/jdbc-1/src/jdbc.properties 内容&#xff1a; #连接MySQL jdbc.userroot jdbc.passwordroot jdbc.driverClasscom.mysql.jdbc.Driver jdbc.jdbcUrljdbc:mysql://127.0.0.1:3306/jdbc1#连接Oracle #jdbc.userscott #jdbc…

Exception in thread “main“ java.lang.NullPointerException 读取本地json文件找不到,SpringBoot访问本地静态资源

Exception in thread "main" java.lang.NullPointerExceptionat com.jzx.JsonDemo.main(JsonDemo.java:12)在application.properties配置中也进行了修改 spring.resources.static-locationsclasspath:/static/最后发现json文件在target中未找到 可以通过重新编译&am…

c#程序框架-基于视图的数据列表查询

从一开始没太注意数据的查询到后面慢慢的发现&#xff0c; 一些数据表的关联已太乱了&#xff0c;才觉得应该整理整理了&#xff0c; 有的表&#xff08;或连接视图&#xff09;&#xff0c;被管理后台用&#xff0c;被前台用&#xff0c;被app用&#xff0c;被wap用&#xff0…

kettle数据库链接共享(或本地配置文件)

在一个文件里&#xff0c;新建所有需要共享的数据库链接。 然后右键数据库链接&#xff0c;点共享。 之后重启Kettle可以完成共享&#xff0c;或者重复共享&#xff0c;取消共享操作。 共享操作主要是修改了&#xff0c;kettle本地的配置文件shared.xml 有需要的小伙伴&…