第五讲 String,StringBuffer,StringBuilder有何区别,各自特点.

1.String类型为什么用final修饰?

String是典型的Immutable(不可变)类,final修饰意味着String类型不能被继承,减少被修改的可能,从而最大程度上确保了安全性.

2.StringBuffer,StringBuilder有何区别?

因为String是immutable类,所有操作对String类型进行数据操作时,都是新建String类型,而String又是非常常见的类型,所以完全使用String进行操作的话,对应用开销是不小的负担.因而出现了操作可变字符串的StringBuffer和StringBuiilder,

    1.StringBuffer是线程安全的,这意味着它有额外的同步开销
    2.StringBuilder是线程非安全的,性能更好,在不考虑多线程的情况下优先使用StringBuilder

注:

  1.StringBuffer和StringBuilder源码基本上没有什么本质上的区别,二者底层都是有可修改的char数组组成(JDK9后是byte),同样都是集成了AbstractStringBuilder类,只是StringBuffer将所有操作数据的方法加了简单粗暴的synchronized.
  2.在Java8中,字符串拼接会自动转换为StringBuilder的操作方法``

3.字符串优化策略

1.G1 GC字符串排重

在Oracle JDK8u20 之后,Java了一项新特性将相同的字符串指向同一份数据,这个是JVM底层的改变,目前默认关闭,只需要开启一下.
-XX:+UseStringDeduplication

2.Compact Strings 紧凑字符串

在JDK9中,oracle将字符串底层由char数组改为byte数组加上一下标识编码coder,同样是字符串,可以占用更小内存,更快操作.

你可能感兴趣的:(第五讲 String,StringBuffer,StringBuilder有何区别,各自特点.)