String,StringBuffer与StringBuilder的区别

String,StringBuffer与StringBuilder的区别一、JavaString类——String字符串常量字符串广泛应用 在Java编程中,在Java中字符串属于对象,Java提供了 String类来创建和操作字符串。需要注意的是,String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,这样不仅效率低下,而且大量浪费有限的内存空间。我们来看一下这张对String操作时内存变化的图:我们可…

大家好,又见面了,我是你们的朋友全栈君。

一、Java String 类——String字符串常量

字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。

需要注意的是,String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,这样不仅效率低下,而且大量浪费有限的内存空间。我们来看一下这张对String操作时内存变化的图:

String,StringBuffer与StringBuilder的区别

我们可以看到,初始String值为“hello”,然后在这个字符串后面加上新的字符串“world”,这个过程是需要重新在栈堆内存中开辟内存空间的,最终得到了“hello world”字符串也相应的需要开辟内存空间,这样短短的两个字符串,却需要开辟三次内存空间,不得不说这是对内存空间的极大浪费。为了应对经常性的字符串相关的操作,谷歌引入了两个新的类——StringBuffer类和StringBuild类来对此种变化字符串进行处理。

二、Java StringBuffer 和 StringBuilder 类——StringBuffer字符串变量、StringBuilder字符串变量

String,StringBuffer与StringBuilder的区别

当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。

和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

三者的继承结构

String,StringBuffer与StringBuilder的区别

三者的区别:

String,StringBuffer与StringBuilder的区别

(1)字符修改上的区别(主要,见上面分析)

(2)初始化上的区别,String可以空赋值,后者不行,报错

①String

String s = null;   

String s = “abc”;   

②StringBuffer

StringBuffer s = null; //结果警告:Null pointer access: The variable result can only be null at this location

StringBuffer s = new StringBuffer();//StringBuffer对象是一个空的对象

StringBuffer s = new StringBuffer(“abc”);//创建带有内容的StringBuffer对象,对象的内容就是字符串”

小结:(1)如果要操作少量的数据用 String;

(2)多线程操作字符串缓冲区下操作大量数据 StringBuffer;

(3)单线程操作字符串缓冲区下操作大量数据 StringBuilder。

转载自https://blog.csdn.net/weixin_41101173/article/details/79677982,感谢整理和分享!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153401.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 真理的基本的属性是_thread和handler区别

    真理的基本的属性是_thread和handler区别原文地址:http://blog.csdn.net/luckeryin/article/details/5649144C#中,Thread类有一个IsBackground的属性.MSDN上对它的解释是:获取或设置一个值,该值指示某个线程是否为后台线程。个人感觉这样的解释等于没有解释..Net中的线程,可以分为后台线程和前台线程。后台线程与前台线程并没有本质的区别,它们之间唯一

    2022年10月16日
  • cmd查看端口占用情况 和 关闭被占用的端口

    cmd查看端口占用情况 和 关闭被占用的端口查询端口号命令:  netstat-nao|findstr“端口号”如图,查看8080端口号,发现被PID为2260的进程占用了关闭占用端口命令:  taskkill/F/PID进程PID如图,关闭PID为2260的进程转载于:https://www.cnblogs.com/CD3245/p/11409754.html…

    2022年5月12日
  • win10JDK环境变量的配置

    win10JDK环境变量的配置在win10系统下进行jdk环境变量与win7的一些区别,作者踩过一些坑,最后通过网上查找资料才将问题解决,但是网上的资料比较零碎,作者整理一下亲自操作过程并且将步骤详细的写了下来,希望能够帮助需要的人。一、下载安装完成jdk之后,桌面右键此电脑选择属性,进入以下界面,然后选择高级系统设置,进入系统配置二、进入系统配置之后点击环境变量,进入环境变量配置窗口三、此时我们可以看到有用户变量…

    2022年7月21日
  • Pythonista中文文档[通俗易懂]

    Pythonista中文文档[通俗易懂]本文档为Pythonista3.3版本官方文档的汉化版,主要为帮助不是很擅长英文的朋友进行阅读学习。本文档主要针对Pythonista中iOS独有的模块进行汉化,第三方模块仅提及一下以便知晓目前Py

    2022年8月6日
  • 微信小程序 弹出框_如何设置小程序弹窗公告

    微信小程序 弹出框_如何设置小程序弹窗公告消息提示框 模态弹窗 操作菜单1.消息提示——wx.showToast(OBJECT)//show.js//获取应用实例varapp=getApp()Page({ showok:function(){ wx.showToast({ title:’成功’, icon:’success’, duration:

    2022年10月29日
  • 接口测试框架之Karate

    接口测试框架之Karate之前在一些博客中零零散散看到过对Karate介绍,基本都和Graphql接口测试绑定在一起,似乎测试GraphqlAPI首选的工具之一就是Karate。后来一位开发大牛也推荐我使用Karate,他提到自己之前的项目中就用框架测试Graphql接口,且强调该框架在ThoughtWorks的技术雷达中。想着Graphql使用越来越广泛,且技术雷达中介绍过的框架一般都有其独特优势,带着这些好奇心我花了…

    2022年10月23日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号