String,StringBuffer,StringBuilder的区别
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的区别相关推荐
- java中 String StringBuffer StringBuilder的区别
* String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...
- String StringBuffer StringBuilder的区别
简单的事情做到极致也是一种能力. 首先,说一下目前我还没进行整理的情况下,我的理解: String 不可修改 修改后相当于又新创建创建一个字符串 比如: String a = "abc&qu ...
- 【翻译】Java中String, StringBuffer, StringBuilder的区别
2019独角兽企业重金招聘Python工程师标准>>> String 是 Java 中最重要的类之一,并且任何刚开始做Java编程的人,都会 用String定义一些内容,然后通过著 ...
- java stringbuffer原理_深入理解String, StringBuffer, StringBuilder的区别(基于JDK1.8)
String.StringBuffer.StringBuilder都是JAVA中常用的字符串操作类,对于他们的区别大家也都能耳熟能详,但底层到底是怎样实现的呢?今天就再深入分析下这三种字符串操作的区别 ...
- Java中String,StringBuffer,StringBuilder的区别
String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 运行速度 StringBuilder > StringBuffe ...
- String, StringBuffer,StringBuilder
String, StringBuffer,StringBuilder的区别 java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,都实现了CharSe ...
- StringBuffer类,StringBuffer类和String的区别、String,StringBuffer,StringBuilder之间的区别
1.概述 StringBuffer是一个线程安全的可变序列. 2.StringBuffer与String区别 (1)StringBuffer的长度和内容都可以发生改变,String却不行 (2)Str ...
- 116day(String,StringBuffer,StringBuilder,模拟器和虚拟机的区别,复合命题的种类)
<2018年2月4日>[连续116天] 标题:String,StringBuffer,StringBuilder,模拟器和虚拟机的区别,复合命题的种类: 内容: A.详见http://bl ...
- String StringBuffer StringBuilder区别与联系
String StringBuffer StringBuilder String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量 ...
最新文章
- ComplexHeatmap绘制热图(一)
- android 窗口监听按键,Android编程实现Dialog窗体监听的方法
- 邮件header中的subject或者from解码
- c#操作数据库(二)dataAdapter篇
- java集合框架03
- JDK6u25里添加的按线程统计分配内存量: JMX
- 计算机软件系统包括应用软件和什么,计算机软件系统包括什么
- HTML基础(part7)--常用标签之超链接标签
- JavaScript学习总结(8)——JS实用技巧总结
- 帆软报表插件开发之fine-decision中的AccessProvider扩展
- Hadoop平台搭建
- 拍拍二手重装上阵,京东剑指闲鱼胜算几何?
- Java版取色器(2)——安装IntelliJ IDEA
- 使用谷歌云盘生成直接下载的url
- Python redis安装使用教程
- SOM神经网络、LVQ神经网络、CPN神经网络与Python实现
- python基础题目练习,购买猕猴桃
- python缩进块是什么,Python块缩进
- html meta标签‘http-equiv’属性的详解用法
- ubuntu 安装 魔霸_ROG 玩家国度 魔霸2怎么安装系统?
热门文章
- [转]在WPF中自定义控件 UserControl
- 增强:MB1A物料价格检查
- C/C++中的拷贝构造函数和赋值构造函数
- ABAP DESCRIBE语句
- 区分一下强制类型转换运算符重载/赋值运算符重载/对象定义的赋值
- mysql 交叉统计_统计知识——交叉分组表
- bom event周期_DOM-BOM-EVENT(1)
- 如何处理高并发写入mysql_如何处理高并发情况下的DB插入
- html遇到英文单词整体换行,CSS单词换行and断词,你真的完全了解吗_html/css_WEB-ITnose...
- python库怎么绘画_python基础,安装并使用matplotlib库画图