String为什么是不可变的
string 为什么 不可
2023-06-13 09:15:50 时间
String为什么是不可变的
我们通过查看String源码可以发现 String内部char数组是通过 private final
修饰的,表示不可访问 而且String类也通过final修饰表示不可继承
这样做的目的是
保证了
String类的线程安全
,如果String可以改变,我们通过写一个类继承String 可以篡改数据 保证了hash属性值不会频繁变更,保证了唯一性,这也是HashMap采用String作为key的原因 实现了字符串常量池,在java中创建字符串对象有两种方式
- 通过字符串常量创建,这种会在字符串中通过equls方法去判断当前字符串是否存在 存在直接返回,不存在在常量池创建对象
- 通过new创建 这样会保证堆和字符串常量中都有该对象,没有就创建该对象,最后返回堆中的对象引用地址值 先判断字符串常量池中有没有创建该对象,如果存在就回去堆内存中判断是否存在该对象,如果不存在创建对象,然后返回
相关文章
- java map 转string_java-将Map <String,Object>转换为Map <String,String>
- java long string 转换_Java long 转成 String的实现[通俗易懂]
- long转string java_java中Long类型转换为String类型的两种方法及区别
- long转string mybatis_Long转String总结
- ORA-00328: archived log ends at change string, need later change string ORACLE 报错 故障修复 远程处理
- ORA-24023: Internal error in DBMS_AQ_EXP_INTERNAL.string [string] [string] ORACLE 报错 故障修复 远程处理
- ORA-38766: cannot flashback data file string; file resized smaller ORACLE 报错 故障修复 远程处理
- ORA-39796: column array entry for string is not valid for the current subtype ORACLE 报错 故障修复 远程处理
- ORA-48469: Keyword “string” cannot be duplicated ORACLE 报错 故障修复 远程处理
- ORA-48936: The number of relations exceeds maximum number [string] ORACLE 报错 故障修复 远程处理
- ORA-51110: buffer size [string] is too small – [string] is needed ORACLE 报错 故障修复 远程处理
- ORA-01425: escape character must be character string of length 1 ORACLE 报错 故障修复 远程处理
- ORA-14523: Cannot co-locate [sub]partition of string string with table [sub]partition because string block size [string] does not match table block size [string] ORACLE 报错 故障修复 远程处理
- ORA-16728: consistency check for property string found string error ORACLE 报错 故障修复 远程处理
- ORA-19105: invalid XQueryX: expected text node – got string ORACLE 报错 故障修复 远程处理
- 为什么String是不可变对象详解编程语言
- c#中String和string的区别介绍