String、StringBuilder、StringBuffer的深入解析

原创 2018年04月16日 23:49:25

String不同于基本的数据类型(byte,boolean,char,short,int,long,float,double,(void));

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

String基于final的类,那么就有人会问,为什么String类是final的呢
这就要从场景来分析了,首先来看下使用频率,String是一个高频使用的字符类。而定义了final后,就说明了该变量是不可修改的,同时所修饰的类是不可以被继承的。
一切归根接地来说都是为了安全。

并不是说final修饰的就不可以改变。下面的代码是编译通过的。
        final int []array = {1,5,3};
        array[2] = 1;
String的本质是char数组,而将其私有化导致无法访问才是问题的根本。
再看如下场景
HashSet<String> hs = new HashSet<String>();
String s1="a";
String s2="ab";
hs.add(s1); hs.add(s2);
String s3=s1; s1+="b";
System.out.println(hs);
//输出
//[a, ab]

再看另外一个场景
HashSet< StringBuilder > hs = new HashSet< StringBuilder >();
StringBuilder s1 = new StringBuilder("aa");
StringBuilder s2 = new StringBuilder("aab");
hs.add(s1); hs.add(h2);
//一切到这都是没有任何问题的,转折在此
StringBuilder s3 = s1;

s3.append("b");

s3是指向s1的地址的,s3的修改会带动s1的修改。

//那么输出为
//[ab]

HashSet会自动合并重复的的对象,而在HashMap中,key是不允许出现重复的,会发生覆盖现象。这是程序员没注意到的意外就发生了。

StringBuilder和StringBuffer的不同
StringBuilder可变,同时是非线程安全的。
StringBuffer可变,是线程安全的(synchronized)
String不可变,也就是只支持写,所以可以说是线程安全的。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/windflybird/article/details/79968668

String、StringBuilder、 StringBuffer 深入分析 源码解析

java学习有一段时间了,但学习的东西都是框架等东西,java基础知识有点遗忘,所以重温一下java基础知识,写写文章里面有错的希望大家指正共同进步~~ 一、String 大家经常会说使用“+”号...
  • QH_JAVA
  • QH_JAVA
  • 2015-06-06 11:32:05
  • 6425

深入理解String类型、StringBuilder、StringBuffer的区别与使用

深入理解String类型、StringBuilder、StringBuffer的区别与使用 待续。。。
  • chenchunlin526
  • chenchunlin526
  • 2017-05-19 09:58:28
  • 267

StringBuffer 与 StringBuilder 区别与联系及源码分析

StringBuffer和StringBuilder的共同点: 1、都是用于操作字符串,使用这两个而不使用String的原因是因为String是Final类型,当对字符串操作较多时采用Str...
  • u010854517
  • u010854517
  • 2017-03-08 10:07:38
  • 712

String、StringBuffer、StringBuilder源码比较

1)String:    Concat:return new String(value); 2)StringBuffer: char[]    如果指明了大小,开辟指明大小的空间。否则默认开辟(...
  • u010286334
  • u010286334
  • 2016-09-19 16:02:02
  • 232

Java常考面试题7 深刻认识String、StringBuilder、StringBuffer

深刻认识String、StringBuilder、StringBuffer
  • HZ_LIZX
  • HZ_LIZX
  • 2017-02-10 10:22:26
  • 624

java面试题String,StringBuilder,StringBuffer

String StringBuffer StringBuilder面试题
  • dfdsggdgg
  • dfdsggdgg
  • 2016-05-09 22:39:23
  • 3044

StringBuilder的用法及String,StringBuffer与StringBuilder的区别

  声明:本文大部分内容为参考别人的,自己简单汇总整理了一下。   String 字符串常量   StringBuffer 字符串变量(线程安全)   StringBuilder 字符串变量(非...
  • u011489043
  • u011489043
  • 2017-03-30 15:33:43
  • 996

String、StringBuilder和StringBuffer的区别

  • 2011年06月09日 09:19
  • 55KB
  • 下载

String,StringBuffer,StringBuilder个人认为较重要的区别

今天在整理不可变对象知识点时,突然看到了String,StringBuffer,StringBuilder三者的区别,这里就挑一些我认为比较重要的点记录一下,方便日后查看。     String...
  • u010758939
  • u010758939
  • 2017-02-06 15:23:05
  • 697

String&&StringBuffer&&StringBuilder深层次解析

一、不同 1、对象创建效率: StringBuffer与StringBuilder都大于String(原因是String创建的对象位于常量池,是一个不可变常量) 而StringBuilder是J...
  • FullStackDeveloper
  • FullStackDeveloper
  • 2016-07-25 23:02:14
  • 773
收藏助手
不良信息举报
您举报文章:String、StringBuilder、StringBuffer的深入解析
举报原因:
原因补充:

(最多只允许输入30个字)