美文网首页
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不可变性的思考

    有一个面试官问了这么一个问题:String为什么要设计为不可变?当时回答的并不好,且觉得这个问题比较好,所以就决定...

  • 面试题汇总

    1. String, StringBuffer and StringBuilder 可变性String 不可变St...

  • Java基础与框架

    1.String、StringBuffer、StringBuilder的区别? 可变性:String不可变(字符串...

  • 对于String不可变性的思考

    众所周知,String是一个不可变类,因为它被final修饰。同时,它内部的char[] 数组也是被final修饰...

  • 什么是 String 的不可变性?

    String 被声明为 final,是不可变的,它也不可被继承。 通过源码了解 String 的不可变性 在 Ja...

  • Diagram to show Java String’s Im

    图解java中String的不可变性 翻译自 What is string immutability 定义字符串 ...

  • String不可变性

    1、什么是不可变 不可变对象是指对象在初始化后,在它的整个生命周期里,都是不可以被改变的。 2、为什么String...

  • Android 面试要点之字符

    1. String的不可变性 参考资料一旦一个String对象在内存中创建,它将是不可改变的,所有的String类...

  • String,StringBuffer 和 StringBuil

    主要从三个方面谈这三个类的区别: 可变性 线程安全性 性能 可变性 String为什么是不可变的?String内部...

  • Java基础(四)

    Java基础4 JAVA字符 1.String的不可变性 String 是一个对象,一个封装了字符数组的对象。不可...

网友评论

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

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