zoukankan      html  css  js  c++  java
  • (1)请你说明String 和StringBuffer,StringBuilder的区别

    (1):String 是对象不是原始类型,是不可变对象,一旦创建,就不能修改它的值,对于已经存在的String对象的修改都是重新创建一个String对象,把新的值保存进去;String是final类,不能被继承。

    这里补充下原始类型:char,boolean,byte,short,int,long,float,double对应其包装类型:首字母大写:Character,Boolean,Byte,Short,Integer,Long,Float,Double

    (2):StringBuffer 是可以修改的对象,修改它的时候不会像创建String对象一样重新创建赋值,它只能通过构造函数创建,在创建后会在内存中分配空间,初始化会保存一个null,当向StringBuffer赋值的时候可以通过它的append方法。它的本质是一个线程安全的可修改的字符序列,把所有修改数据的方法都加上synchronized。但是保证了线程安全是需要性能的代价。

    (3):在操作字符串连接中StringBufer效率要比String要高:

    String str = new String("hello,word");

    str + = "xiaoming";

    上面的处理其实是先通过建立一个StringBuffer 通过append方法,最后 .toString(); 通过对比知道String的连接操作比StringBuffer多了一些操作,效率会大打折扣。

    (4):String对象的创建修改过程每次都会创建新的对象,这样之前的对象就会被垃圾回收,影响性能。

    -------------

    (5):StringBuilder JDK1.5发布的,与StringBuffer本质上没有区别,就是去掉了保证线程安全那部分,减少了开销。

    (6):StringBuffer与StringBuilder都继承了AbstractStringBuilder,底层都是利用可修改的char数组(JDK9后是byte数组)。

    (7):如果有大量字符串需要拼接,如果能预知大小,最好在new StringBuffer,StringBuilder的时候设置capacity,避免多次扩容,扩容要抛弃原有数组拷贝创建新的数组。

    总结:少量操作字符串使用String就够了,如果在程序中需要对字符串频繁修改连接操作,String在操作字符串的时候new了很多次StringBuffer,建议使用StringBuffer,这样性能更高,很多情况下我们操作字符串不需要线程安全,可以用StringBuilder,减小开销。

  • 相关阅读:
    eclipse转ieda新手教程之-如何从svn导入一个 Maven 项目到 IntelliJ IDEA 2017
    从svn下载maven项目到ieda
    Maven的下载、安装与配置
    java.lang.NoClassDefFoundError: com/google/common
    guava.jar下载
    js,时间格式的验证
    为什么String类型的日期,传到前台变成数字了
    java&oracle日期查询
    java空指针异常
    java获取当前时间的第二天
  • 原文地址:https://www.cnblogs.com/baimh/p/11185313.html
Copyright © 2011-2022 走看看