为什么说String是不可变的,有什么好处
为什么String是不可变的?
String类声明为final类,不可被继承
同时String内部的属性都是私有的,并且没有提供可供修改操作(类似SetXXX的方法)的方法,所以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是不可变的,保证了线程的安全,
还没有评论,来说两句吧...