Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >String、StringBuffer、StringBulider之间的联系和区别

String、StringBuffer、StringBulider之间的联系和区别

作者头像
Dato
发布于 2018-04-17 03:27:41
发布于 2018-04-17 03:27:41
1.1K0
举报
文章被收录于专栏:DatoDato

首先,我们大概总体的解释一下这三者的区别和联系

String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。

StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。

StringBuilder和StringBuffer类功能基本相似,唯一的区别就是StringBuilder不是线程安全的。

下面具体看看:

1. String 类  String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。  String s = "a"; //假设s指向地址0x0001  s = "b";//重新赋值后s指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是s所指向的,s已经指向了其它地址。  因此String的操作都是改变赋值地址而不是改变值操作。 

2. StringBuffer 类

StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。

每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。  StringBuffer buf=new StringBuffer(); //分配长16字节的字符缓冲区  StringBuffer buf=new StringBuffer(512); //分配长512字节的字符缓冲区  StringBuffer buf=new StringBuffer("this is a test")//在缓冲区中存放了字符串,并在后面预留了16字节的空缓冲区。

3.StringBuilder  StringBuffer和StringBuilder类功能基本相似,主要区别在于StringBuffer类的方法是多线程、安全的,而StringBuilder不是线程安全的,相比而言,StringBuilder类会略微快一点。毕竟StringBuilder不是线程安全,小号的资源也没有那么大。对于经常要改变值的字符串应该使用StringBuilder类。

4.线程安全  StringBuffer 线程安全  StringBuilder 线程不安全  5.速度   一般情况下,速度从快到慢:StringBuilder > StringBuffer > String,这种比较是相对的,不是绝对的。 

6.总结  (1).如果要操作少量的数据或者是可以用final修饰的字符串用 = String  (2).单线程操作字符串缓冲区 下操作大量数据 = StringBuilder  (3).多线程操作字符串缓冲区 下操作大量数据 = StringBuffer 

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-06-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
第03天 String,StringBuffer,StringBuilder的区别
StringBuffer 是线程安全的,因为它的每个操作方法都加了 synchronized 同步关键 字。
程序员Leo
2023/08/11
1420
第03天 String,StringBuffer,StringBuilder的区别
Java常用类(三)之StringBuffer与StringBuidler
前言   前面一篇给大家介绍了String类,这个我们经常会用到的一个类,那这一篇给大家分享的是StringBuffer与StringBuidler。等下我也会比较他们三个之间的区别 一、String
用户1195962
2018/01/18
5270
Java常用类(三)之StringBuffer与StringBuidler
【每日小知识】String StringBuffer 、 StringBuilder 、String
简单的来说:String 类中使用 final 关键字修饰字符数组来保存字符串,private final char value[],所以 String 对象是不可变的。而StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符数组保存字符串char[]value 但是没有用 final 关键字修饰,所以这两种对象都是可变的。
Python进击者
2020/02/14
6220
【每日小知识】String StringBuffer 、 StringBuilder 、String
String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的
String类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的。String Builder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,char[] value,这两种对象都是可变的。
捞月亮的小北
2024/03/01
890
Java中的String,StringBuilder,StringBuffer三者的区别
今天在牛客刷题遇到了Java中的String,StringBuilder,StringBuffer三者之间关系的问题,我从网上搜索了一些相关介绍,在这里整理一下,便于自己学习,也希望可以帮到大家学习。
鲲志说
2025/04/07
820
新手学JAVA(三)----StringBuilder类
上一篇文章新手学JAVA(二)----String类与StringBuffer类的区别中了解到,String的值是不可变的,这就导致
令仔很忙
2018/09/14
4390
新手学JAVA(三)----StringBuilder类
Java中String、StringBuffer和StringBuilder的区别
三者共同之处:都是final类,不允许被继承,主要是从性能和安全性上考虑的,因为这几个类都是经常被使用着,且考虑到防止其中的参数被参数修改影响到其他的应用。
赵哥窟
2019/12/26
6560
Java中String、StringBuffer和StringBuilder的区别
String、StringBuffer、StringBuilder的区别
String 字符串常量,字符串长度不可变,每次对String的操作都会产生一个新的对象。不仅效率低下,而且大量浪费有限的内存空间。
103style
2022/12/19
2260
图析:String,StringBuffer与StringBuilder的区别
字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。
全栈程序员站长
2022/09/07
2810
图析:String,StringBuffer与StringBuilder的区别
String、StringBuffer与StringBuilder之间区别
简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,这样不仅效率低下,而且大量浪费有限的内存空间,所以经常改变内容的字符串最好不要用 String 。因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。
全栈程序员站长
2022/09/07
2730
String、StringBuffer与StringBuilder之间区别
深入理解String、StringBuffer和StringBuilder类的区别
Java提供了String、StringBuffer和StringBuilder类来封装字符串,并提供了一系列操作字符串对象的方法。
本人秃顶程序员
2019/04/17
19.1K5
深入理解String、StringBuffer和StringBuilder类的区别
转:String,StringBuffer与StringBuilder的区别??
String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全)  简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。  而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。而在某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,而特别是以下的字符串对象生成中, String 效率是远要比 StringBuffer 快的:  String S1 = “This is only a” + “ simple” + “ test”;  StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);  你会很惊讶的发现,生成 String S1 对象的速度简直太快了,而这个时候 StringBuffer 居然速度上根本一点都不占优势。其实这是 JVM 的一个把戏,在 JVM 眼里,这个  String S1 = “This is only a” + “ simple” + “test”; 其实就是:  String S1 = “This is only a simple test”; 所以当然不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的 String 对象的话,速度就没那么快了,譬如: String S2 = “This is only a”; String S3 = “ simple”; String S4 = “ test”; String S1 = S2 +S3 + S4; 这时候 JVM 会规规矩矩的按照原来的方式去做
Dar_Alpha
2018/09/03
5050
StringBuffer与StringBuilder的区别_String
因为String是不可变的,StringBuffer 和 StringBuilder 它们都是可变的字符串,不过它们之间的区别是 Java 初中级面试出现几率十分高的一道题。这么简单的一道题,栈长在最近的面试过程中,却经常遇到很多求职者说反,搞不清使用场景的情况。
全栈程序员站长
2022/09/29
2480
StringBuffer与StringBuilder的区别_String
【Java基础篇】String、StringBuffer和StringBuilder的区别
String类是不可变类(final修饰),即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。
程序员云帆哥
2022/05/12
1780
【Java基础篇】String、StringBuffer和StringBuilder的区别
String、StringBuilder和StringBuffer的区别
String是一个不可变类,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。
说故事的五公子
2022/05/09
2770
String、StringBuilder和StringBuffer的区别
Java学习笔记(二)——基础语法
对于整型数据,通常情况下使用 int 类型。但如果表示投放广岛长崎的原子弹释放出的能量,就需要使用 long 类型了。byte 和 short 类型主要用于特定的应用场合,例如,底层的文件处理或者需要控制占用存储空间量的大数组。
蛮三刀酱
2019/09/10
5580
String、StringBuilder、StringBuffer 用法比较
String、StringBuilder、StringBuffer 三个类源自JDK的 java/lang/ 目录下:
阳光岛主
2019/02/19
6170
String、StringBuffer与StringBuilder之间区别
最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下。
DencyCheng
2018/11/05
4140
018:String、StringBuilder和StringBuffer的区别
Java中的String对象是不可变对象,针对字符串对象的操作(例如subString、contact、replace)都会生成一个新的String对象,如果应用中有大量这样的操作,就会产生大量的临时String对象,会影响Java应用运行的性能。
阿杜
2019/03/12
5450
StringBuffer StringBulider String的区别
补充: (1) String的创建机理 由于String在Java世界中使用过于频繁,Java为了避免在一个系统中产生大量的String对象,引入了字符串常量池。其运行机制是:创建一个字符串时,首先检查池中是否有值相同的字符串对象,如果有则不需要创建直接从池中刚查找到的对象引用;如果没有则新建字符串对象,返回对象引用,并且将新创建的对象放入池中。但是,通过new方法创建的String对象是不检查字符串池的,而是直接在堆区或栈区创建一个新的对象,也不会把对象放入池中。上述原则只适用于通过直接量给String对象引用赋值的情况。
袁新栋-jeff.yuan
2020/08/26
4050
推荐阅读
相关推荐
第03天 String,StringBuffer,StringBuilder的区别
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档