We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
安全,常量,hashCode 即安全和性能
安全(考虑类加载的关系,多线程使用时) 性能(常量池,hashcode)
因为String设计成不可变主要是考虑性能和安全. 性能是String为常量池,hashcode 安全是在多线程使用是他是线程安全的.
1,字符串常量池的需要
当创建一个 String 对象时,如果此字符串已经存在于常量池中,则不会创建一个新的对象,而是引用已经存在的对象
如果允许改变,那么将导致各种逻辑错误,比如改变一个对象将会影响另一个独立对象,严格来说,这种常量池的思想是一种优化手段
2,允许String对象缓存 HashCode
java 中 String 对象的哈希码会被频繁的使用,比如在 hashMap中。字符串的不变形保证了hash码的唯一性,因此可以放放心的进行缓存。这也是一种优化手段,意味着不必没说都计算新的哈希码。在 String 类中有 private int hash 来缓存hashcode
3,安全性
String 被许多的类来当做参数,如 网络url,文件路径path 等等,如果String 不是固定的,将会引起各种安全隐患
性能优化(常量池存储,字符串不变保证了Hashcode唯一性) 安全性(考虑类加载的关系,多线程使用时,网络请求时url地址)
Activity
DaveBoy commentedon Sep 24, 2019
安全,常量,hashCode
即安全和性能
Petterpx commentedon Sep 24, 2019
安全(考虑类加载的关系,多线程使用时)
性能(常量池,hashcode)
JianhuaWan commentedon Sep 24, 2019
因为String设计成不可变主要是考虑性能和安全.
性能是String为常量池,hashcode
安全是在多线程使用是他是线程安全的.
LvKang-insist commentedon Sep 24, 2019
1,字符串常量池的需要
当创建一个 String 对象时,如果此字符串已经存在于常量池中,则不会创建一个新的对象,而是引用已经存在的对象
如果允许改变,那么将导致各种逻辑错误,比如改变一个对象将会影响另一个独立对象,严格来说,这种常量池的思想是一种优化手段
2,允许String对象缓存 HashCode
java 中 String 对象的哈希码会被频繁的使用,比如在 hashMap中。字符串的不变形保证了hash码的唯一性,因此可以放放心的进行缓存。这也是一种优化手段,意味着不必没说都计算新的哈希码。在 String 类中有 private int hash 来缓存hashcode
3,安全性
String 被许多的类来当做参数,如 网络url,文件路径path 等等,如果String 不是固定的,将会引起各种安全隐患
gabyallen commentedon Sep 24, 2019
性能优化(常量池存储,字符串不变保证了Hashcode唯一性)
安全性(考虑类加载的关系,多线程使用时,网络请求时url地址)