String为什么要设计成final
来源:互联网 发布:云计算应用架构 编辑:程序博客网 时间:2024/06/07 14:49
前言:
今天突然看到一个问题为什么String类型设计为final,之前没深入想过这个问题,现在来看看。
源码中对String为什么设计成final的解释:
Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are immutable they can be shared.
字符串是恒定的,创建之后它们的值不能被改变。StringBuffer是可变的strings.字符串对象不可变让它们可以被共享。
什么叫不可改变?
就是这个值一旦在常量池被创建,是无法修改的,即便你在后面拼接一些其他字符,也会把新生成的字符串存到另外一个地址了,比如:
String a = "abc"; Log.e("ss","a之前的hashCode:"+a.hashCode());//a之前的hashCode:96354 a = "abc" + "123"; Log.e("ss","a之后的hashCode:"+a.hashCode());//a之后的hashCode:-1424436592
为什么不可变?
之前一直不能理解为什么String创建之后不能被修改,因为陷入了2个低级误区,想明白了这些问题一切都很好理解了:
1.错把不可修改当成了字符串变量的指向,因为即便改变了字符串变量的指向,但是原来的字符串还是在常量池一切都没变;
2.把字符串的存储位置在常量池忽略了,常量池中的数据可以被共享,导致可能很多地方都在操作这个对象,尤其在多线程中是很危险的。
不可变有什么好处?
1.线程安全
2.支持字符串常量池数据共享,节省资源,提高效率(因为如果已经存在这个常量便不会再创建,直接拿来用)
String,StringBuffer和StringBuilder对比:
阅读全文
0 0
- String为什么要设计成final
- Java的String为什么要设计成final
- java中String类为什么要设计成final
- 【知乎】String类为什么要设计成final?
- 在java中String类为什么要设计成final?
- 在java中String类为什么要设计成final?
- String类为什么要设计成final修饰的
- 在java中String类为什么要设计成final?
- 在java中String类为什么要设计成final?
- 为什么String类被设计成final
- 为什么jdk中把String类设计成final?
- 为什么jdk中把String类设计成final?
- 为什么jdk中把String类设计成final?
- 为什么 jdk 中把 String 类设计成 final
- 为什么jdk中把String类设计成final?
- 为什么 jdk 中把 String 类设计成 final
- 为什么jdk中把String类设计成final?
- 为什么jdk中把String类设计成final
- 动态查找
- 查看、杀死进程
- spark on yarn 异常记录二
- 理解Java对象序列化
- jquey的parent()和parents()的区别
- String为什么要设计成final
- Poedu_Windows_IO操作
- 静
- 线程通信
- 第十一周作业: Find All Duplicates in an Array
- 矩形问题
- linux网路工具、网络、网络编程、网络库、网络内核学习(一)
- Unicode UTF-8 UTF-16 UTF-32区别与联系
- 网易笔试题:最大的奇约数