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. ComplexHeatmap绘制热图(一)
  2. android 窗口监听按键,Android编程实现Dialog窗体监听的方法
  3. 邮件header中的subject或者from解码
  4. c#操作数据库(二)dataAdapter篇
  5. java集合框架03
  6. JDK6u25里添加的按线程统计分配内存量: JMX
  7. 计算机软件系统包括应用软件和什么,计算机软件系统包括什么
  8. HTML基础(part7)--常用标签之超链接标签
  9. JavaScript学习总结(8)——JS实用技巧总结
  10. 帆软报表插件开发之fine-decision中的AccessProvider扩展
  11. Hadoop平台搭建
  12. 拍拍二手重装上阵,京东剑指闲鱼胜算几何?
  13. Java版取色器(2)——安装IntelliJ IDEA
  14. 使用谷歌云盘生成直接下载的url
  15. Python redis安装使用教程
  16. SOM神经网络、LVQ神经网络、CPN神经网络与Python实现
  17. python基础题目练习,购买猕猴桃
  18. python缩进块是什么,Python块缩进
  19. html meta标签‘http-equiv’属性的详解用法
  20. ubuntu 安装 魔霸_ROG 玩家国度 魔霸2怎么安装系统?

热门文章

  1. [转]在WPF中自定义控件 UserControl
  2. 增强:MB1A物料价格检查
  3. C/C++中的拷贝构造函数和赋值构造函数
  4. ABAP DESCRIBE语句
  5. 区分一下强制类型转换运算符重载/赋值运算符重载/对象定义的赋值
  6. mysql 交叉统计_统计知识——交叉分组表
  7. bom event周期_DOM-BOM-EVENT(1)
  8. 如何处理高并发写入mysql_如何处理高并发情况下的DB插入
  9. html遇到英文单词整体换行,CSS单词换行and断词,你真的完全了解吗_html/css_WEB-ITnose...
  10. python库怎么绘画_python基础,安装并使用matplotlib库画图