为什么说String是不可变的,有什么好处

末蓝、 2024-04-19 08:47 208阅读 0赞

为什么String是不可变的?

String类声明为final类,不可被继承
String类
同时String内部的属性都是私有的,并且没有提供可供修改操作(类似SetXXX的方法)的方法,所以String是不可变的
String类的属性

误区:String a = “abc” ; a = a.subString(1); 明明是改变了String的值啊,为什么还说String是不可变的呢?而且String类内部还存在类似substring的方法 replace, replaceAll, toLowerCase…等方法

在这里插入图片描述

在这里插入图片描述

其实不然,这些方法在底层都做了new String()的操作的,看源码就可以知道,
只是改变了引用(句柄或者指针)的指向,重新将a指向了新的字符串而已(脑补一波对象的存储方式和对象的引用相关知识点)

String是不可变的有什么好处

1.缓存hash值,因为String的hash值会经常用到,比如String做HashMap的key,那么String不可变保证hash值不可变,只需要计算一次,提高计算效率,

2.String Pool 字符串常量池,一旦字符串String 被创建,下次创建相同的字符串就可以从常量池直接取,也只有当String是不可变才能这样做,

3.安全String 经常作为参数,String 不可变性可以保证参数不可变。例如在作为网络连接参数的情况下如果 String 是可变的,那么在网络连接过程中,String 被改变,

改变 String 对象的那一方以为现在连接的是其它主机,而实际情况却不一定是。
4.线程安全 String是不可变的,保证了线程的安全,

发表评论

表情:
评论列表 (有 0 条评论,208人围观)

还没有评论,来说两句吧...

相关阅读