1 Java String 类是字符串常量

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

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

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

2 StringBuffer和StringBuilder是字符串变量

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

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

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

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

三者的继承结构


三者的区别

(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 locationStringBuffer 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,感谢整理和分享!

String,StringBuffer,StringBuilder的区别相关推荐

  1. java中 String StringBuffer StringBuilder的区别

    * String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...

  2. String StringBuffer StringBuilder的区别

    简单的事情做到极致也是一种能力. 首先,说一下目前我还没进行整理的情况下,我的理解: String 不可修改 修改后相当于又新创建创建一个字符串 比如: String a = "abc&qu ...

  3. 【翻译】Java中String, StringBuffer, StringBuilder的区别

    2019独角兽企业重金招聘Python工程师标准>>> String 是  Java 中最重要的类之一,并且任何刚开始做Java编程的人,都会 用String定义一些内容,然后通过著 ...

  4. java stringbuffer原理_深入理解String, StringBuffer, StringBuilder的区别(基于JDK1.8)

    String.StringBuffer.StringBuilder都是JAVA中常用的字符串操作类,对于他们的区别大家也都能耳熟能详,但底层到底是怎样实现的呢?今天就再深入分析下这三种字符串操作的区别 ...

  5. Java中String,StringBuffer,StringBuilder的区别

    String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 运行速度 StringBuilder > StringBuffe ...

  6. String, StringBuffer,StringBuilder

    String, StringBuffer,StringBuilder的区别 java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,都实现了CharSe ...

  7. StringBuffer类,StringBuffer类和String的区别、String,StringBuffer,StringBuilder之间的区别

    1.概述 StringBuffer是一个线程安全的可变序列. 2.StringBuffer与String区别 (1)StringBuffer的长度和内容都可以发生改变,String却不行 (2)Str ...

  8. 116day(String,StringBuffer,StringBuilder,模拟器和虚拟机的区别,复合命题的种类)

    <2018年2月4日>[连续116天] 标题:String,StringBuffer,StringBuilder,模拟器和虚拟机的区别,复合命题的种类: 内容: A.详见http://bl ...

  9. String StringBuffer StringBuilder区别与联系

    String     StringBuffer     StringBuilder String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量 ...

最新文章

  1. python的工资为什么这么低-为什么学完Python找不到工作?原因如下!
  2. tomcat架构分析 (Session管理)【转】
  3. Atitit.ati orm的设计and架构总结 适用于java c# php版
  4. Android官方开发文档Training系列课程中文版:动画视图之场景创建
  5. hive sql 优化
  6. 嵌入式工作笔记0006---半导体中的IP核是什么意思
  7. 使用两个队列,改进耗时线程引起的性能问题的思路及代码
  8. 桌面计算机图标固定位置,win10桌面图标如何固定位置|win10电脑桌面图标固定位置方法...
  9. linux系统下头文件、库文件搜索路径总结
  10. ArcGis Engine 符号
  11. 大学期间应当做的三件事
  12. 联想服务器网卡显示不全,ThinkSystem系列服务器板载1Gb网口及LOM网卡接入100Mb交换机显示无连接...
  13. 入侵检测工具AIDE极简教程
  14. matlab绘制收益率曲线并计算风险收益率VaR(Value At Risk)
  15. Pycharm Professional Edition 激活码(license),有效期至2018年10月14日
  16. 蓝牙低功耗音频技术--目录大纲
  17. JVM垃圾回收(二) 垃圾回收算法
  18. 提取音乐用什么软件哪个好
  19. 淘宝一月上钻是这样操作的
  20. VS语音信号处理(2) C语言分段读取WAV语音文件语音数据

热门文章

  1. Python十分适合用来开发网页爬虫
  2. 项目问题记录20170702
  3. bzoj1086[SCOI2005]王室联邦
  4. IDEA阿里巴巴Java开发规约插件使用
  5. HAL驱动库学习-ADC
  6. 最小公倍数与最大公约数
  7. Java泛型之泛型参数
  8. SVN 版本服务器搭配全过程详解(服务端、客户端)[转]
  9. 10个CSS和jQuery的加载中(loading)动画效果实现
  10. 安装.net5.0后怎么在vs里选择_Visual Stdio 2019(或其它版本)怎样全部安装到非系统盘的实现方法(小白版)...