众所周知,String在Java中是不可变的。但是,可以通过获取字段和设置访问级别来使用反射更改它。(我知道这是不建议的,我不打算这样做,这个问题纯粹是理论上的)。
我的问题:假设我知道自己在做什么(并根据需要修改所有字段),程序将正常运行吗?还是jvm进行了一些依赖String不可变的优化?我会遭受性能损失吗?如果是这样,它将做出什么假设?程序中会出什么问题
ps String只是一个示例,除了示例之外,我实际上对通用答案也很感兴趣。
谢谢!
如果您这样做,肯定是在自找麻烦。这是否意味着您一定会立即看到错误?不可以。在很多情况下,您可能会忽略它,具体取决于您的操作。
这有几种情况会刺伤您:
function
and在某处被称为like function("Bob")
; 在这种情况下,整个应用程序中都会"Bob"
更改字符串(对于声明为的字符串常量也是如此)。final
我知道这个问题是关于Java的,但是我不久前写了一篇博客文章,阐述了如果您在.NET中对字符串进行突变,那么程序的行为可能是多么疯狂。情况确实非常相似。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句