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,同样是字符串,可以占用更小内存,更快操作.
网友评论