美文网首页
String不可变性的思考

String不可变性的思考

作者: 若素Smile | 来源:发表于2021-08-15 23:53 被阅读0次

    有一个面试官问了这么一个问题:String为什么要设计为不可变?当时回答的并不好,且觉得这个问题比较好,所以就决定整理一下。
    思路:我们要知道可变的字符串,Java已经给我们提供了StringBuilder,StringBuffer,那么我觉得我们可以通过对比和StringBuilder使用的不同场景和不可变性带来的便利。

    一.提供与StringBuilder不一样的功能

    对字符串value进行修改使用StringBuilder;

    StringBuilder强调的是对字符串对象本身的操作,类中的方法返回值也是以对象本身为主(return this),比如:sb.append("a").insert("b").deleteCharAt(0);

    字符串需要多次多处重复使用,使用String,是其使用场景

    String的使用是作为数据源,类本身提供的方法返回的是对数据源处理后的字符串,以 return new String("")为主,而对象本身是不变的,不管是substring或者concat方法;

    二.不可变带来的优势和便利

    1.线程安全性

    String的value不可变,天然地保证了使用中的线程安全性

    2.作为HashMap的key

    基于不可变,String可以根据value缓存hashCode和覆写基于value的equals方法,正因此String类同包装类一样,是我们HashMap的key常用类型。字符串是我们日常中常用的数据类型,自然将字符串放进不同集合也是很常见的使用场景(HashSet同理因为就是基于HashMap的)

    3.维护字符串常量池,减少开销

    由于不可变且是线程安全的,JVM才可以维护字符串的常量池,减少对象的创建

    总结

    我们重点理解String和StringBuilder的区别就可以了,尤其线程安全和维护常量池

    相关文章

      网友评论

          本文标题:String不可变性的思考

          本文链接:https://www.haomeiwen.com/subject/wcjsbltx.html