Jil*_*rta 7 java string final immutability
正如我被告知这是Java中重要的字符串访谈问题,它从讨论"什么是字符串"开始,字符串在java中与C或C++有什么不同,然后你被问及不可变对象,你被问到主要问题:"为什么String在Java中是不可变的或最终的".
你能分享一下你的想法吗?
提前致谢.
Moh*_*j B 27
这主要是出于安全考虑.字符串在网络连接,数据库URL等中用作参数.如果它是可变的,它很容易被攻击
不可String解决性解决了一些同步问题,它使String线程安全
支持StringPool工具
要缓存的hashcode的String
为了支持类加载机制中String作为论据.字符串是可变的导致加载错误的类
字符串在许多现代语言(包括Java)中不可变的两个主要原因是安全性和性能(或者更准确地说,是优化的机会).
字符串的事实final是确保它们的不变性(通过禁止任何人扩展它们并使它们再次变得可变).
最重要的原因是安全.
如果恶意线程可以获得对可变String的引用,则会出现很多安全风险,该String将被传递到必须在执行重要操作之前验证String的方法.线程在验证后可以更改字符串,然后使用危险的字符串执行操作.
Why String在Java中不可变的另一个原因是允许String缓存其哈希码
如上所述 - 最重要的原因 - 安全性和线程安全性.
考虑一种情况,在用于汇款的银行应用程序中 - 受益人帐号在字符串中定义为"0789567345".如果错误/故意这个acc.号码被更改,钱将转到错误的帐户.
另一种情况 - 如果有人在处理之间的任何地方更改了类名称..
getClass().getName().subString(0, 5);
Run Code Online (Sandbox Code Playgroud)
类加载器只会说'找不到类
| 归档时间: |
|
| 查看次数: |
21354 次 |
| 最近记录: |