zoukankan      html  css  js  c++  java
  • String Stringbuilder 和StringBuffer的区别

    以前看java的面试题总共有让人说 String StringBuilder 和StringBuffer的区别。今天就详细的记录一下。

    首先是String :其中String类型的源码实际上是一个数组 private final char value[]; 由final修饰,所以String类型不可以更改。String 是在堆上创建字符串对象的。 编译器会将字符串添加到常量池中 并返回指向该常量的引用。如果我们创建了新的String,先会在常量池中寻找,如果存在在直接将引用指向字符串,不存在就新生成一个。

    String s0 = "abc"; 
    String s1 = "abc"; 
    System.out.println(s0==s1); //true  可以看出s0和s1是指向同一个对象的。
    因为String 是常量 ,所以线程是安全的。

    接下来是StringBuilder 和 StringBuffer 都 继承了AbstractStringBuilder
    在AbstractStringBuilder中 使用的也是数组,只不过没有用final来修饰 char[] value;
    相对于StringBuilder 来说,StringBuffer 在方法中加了同步锁。所以是线程安全的。StringBuilder 没有加同步锁,所以是线程不安全的。


    其次 StringBuilder和StringBuffer每次都是对对象本身进行操作,而不是像String一样创建一个新的对象引用。速度就要快很多,而对于StringBuilder和StringBuffer而言,作为StringBuffer因为加了锁
    的缘故,所以性能要比StringBuilder 慢上一些。


  • 相关阅读:
    【02】AJAX XMLHttpRequest对象
    【01】什么是AJAX
    NPM是什么
    nodejs npm常用命令
    angular(转)
    s6 传输层
    s6-9 TCP 定时器
    s6-8 TCP 拥塞控制
    s6-7 TCP 传输策略
    s6-6 TCP 连接释放
  • 原文地址:https://www.cnblogs.com/xiaosisong/p/10830583.html
Copyright © 2011-2022 走看看