`

String、StringBuilder、StringBuffer三者的区别

    博客分类:
  • Java
阅读更多

一、String 类 

1.String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变

private final char value[];

 

2.String的操作都是改变赋值地址而不是改变值操作。
   String a = "a"; //假设a指向地址0x0001 
   a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已经指向了其它地址。 

 

3.String中的对象是不可变的,也就可以理解为常量,显然线程安全

 

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

 

二、StringBuffer类 

1.StringBuffer继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知对象是可变的。

char[] value;

 

2.StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。

 

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


三、StringBuilder类

1.StringBuilder继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知对象是可变的。

char[] value; 

 

2.StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。


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


四、使用场景 
(1).如果要操作少量的数据使用String。
(2).单线程操作字符串缓冲区下操作大量数据使用StringBuilder。
(3).多线程操作字符串缓冲区下操作大量数据使用StringBuffer。

 

转载请注明出处: http://xieke90.iteye.com/blog/2310032

 

2
3
分享到:
评论

相关推荐

    String&StringBuffer&StringBuilder三者之间的区别-经典解析.doc

    StringBuilder三者之间的区别是很有必要的,很多面试面试官都会问到这个知识点。集合网络上很多牛人的各种经典分析的总结,花了两个小时概括总结得出了现在这个最全面、最详细、最精辟、最透彻的解答。 不管是菜鸟...

    String、StringBuilder、StringBuffer的区别

    关于String、StringBuilder、StringBuffer的本质区别,

    2019互联网meet第2季1

    2.1 Java 中的 String,StringBuilder,StringBuffer 三者的区别 2.1.1 运行速度 2.1.2 线程安全 2.2 Ar

    java面试问题总结

    9.StringBuffer和StringBuilder的区别?(实际面试题) 1.在执行速度方面的比较:StringBuilder 快于 StringBuffer 2. StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符...

    knowledge-interview:知识学习

    String、StringBuffer、StringBuilder三者的区别: 都在java.lang 包下 String使用final修饰,不可变,每次字符串变更都是创建新的字符串,String s = “a”+"b"除外,频繁变更会导致无引用对象过多,导致gc影响性能...

    浅谈Java字符串

    我们先要记住三者的特征:  String 字符串常量  StringBuffer 字符串变量(线程安全)  StringBuilder 字符串变量(非线程安全)  一、定义  查看 API 会发现,String、StringBuffer、StringBuilder ...

    包含Java面试的各种知识点。过面试有这一个就够了

    1.6 String、StringBuffer、StringBuilder 三者之间的区别(必会) 1.7 接口和抽象类的区别是什么?(必会) 1.8 string 常用的方法有哪些?(了解) 1.9 什么是单例模式?有几种?(必会) 1.10 反射(了解) 1.11 ...

    安卓java读取网页源码-questions:自问自答

    这三者有什么联系和区别 列举下 Java 的集合和继承关系 说下你对抽象类和接口的理解,以及两者的相同点和不同点 父类的静态方法能否被子类重写 描述下类的加载机制 说说你对 Java 反射的理解 什么是动态代理 在 Java...

    JAVA基础课程讲义

    字符串相关类(String、 StringBuffer 、 StringBuilder) 120 String类的常用方法(已讲过,不再讲!) 120 StringBuffer和StringBuilder 121 String和StringBuffer和StringBuilder使用要点 123 时间处理相关类 124...

    Java面试宝典2020修订版V1.0.1.doc

    35、Statement 中execute、executeUpdate、executeQuery这三者的区别 78 36、jdbc中怎么做批量处理的? 80 37、什么是json 83 38、json与xml的区别 83 39、XML和HTML的区别? 84 40、XML文档定义有几种形式?它们...

    java-workbook-hcthamas:GitHub Classroom创建的java-workbook-hcthamas

    该API包含您必须实现的20种方法: 在不使用StringBuilder或StringBuffer类的情况下,编写一个可反转String的方法。 将短语转换为其首字母缩写词。 确定三角形是等边的,等腰的还是斜角的。 给定一个单词,计算该...

    Java基础知识点总结.docx

    < java.lang >StringBuilder字符串缓冲区:★★★☆ 74 基本数据类型对象包装类★★★☆ 75 集合框架:★★★★★,用于存储数据的容器。 76 < java.util > Collection接口 77 < java.util >Iterator接口 78 ...

    Java高并发高性能分布式框架从无到有微服务架构设计(1).doc

    对于String的连接操作,使 用StringBuffer或者StringBuilder.对于utility类型的类通过静态方法来访问.2. 避免使用错误的方式,如Exception可以控制方法推出,但是Exception要保留stacktrace 消耗性能,除非必要不要使用 ...

    javaSE代码实例

    13.3.1 弥补String不足的StringBuffer类 253 13.3.2 编写方法链以及StringBuffer类的重要方法 255 13.4 StringBuilder类 258 13.5 正则表达式 259 13.5.1 正则表达式的基本语法 259 13.5.2 Pattern类简介...

    2017最新大数据架构师精英课程

    14_String-StringBuffer-StringBuilder 15_集合-list-arrayList-linkedlist 16_集合-hashset-hashmap-迭代器-entryset$ d3 b$ ~5 b! @- Z* }- C 17_快捷键设置* L* C. y4 Z1 v0 p) [8 p3 A 18_IO& f, H- i' w( B; P%...

    疯狂JAVA讲义

    9.3.2 String、StringBuffer和StringBuilder类 322 9.3.3 Math类 327 9.3.4 Random类 328 9.3.5 BigDecimal类 330 9.4 处理日期的类 333 9.4.1 Date类 333 9.4.2 Calendar类 334 9.4.3 TimeZone类 337 9.5 ...

Global site tag (gtag.js) - Google Analytics