使用反射更改字符串的效果

什么:

众所周知,String在Java中是不可变的。但是,可以通过获取字段和设置访问级别来使用反射更改它。(我知道这是不建议的,我不打算这样做,这个问题纯粹是理论上的)。

我的问题:假设我知道自己在做什么(并根据需要修改所有字段),程序将正常运行吗?还是jvm进行了一些依赖String不可变的优化?我会遭受性能损失吗?如果是这样,它将做出什么假设?程序中会出什么问题

ps String只是一个示例,除了示例之外,我实际上对通用答案也很感兴趣。

谢谢!

丹涛:

如果您这样做,肯定是在自找麻烦。这是否意味着您一定会立即看到错误?不可以。在很多情况下,您可能会忽略它,具体取决于您的操作。

这有几种情况会刺伤您:

  • 您修改了恰好在代码内某处被声明为文字的字符串。例如,您有一个functionand在某处被称为like function("Bob"); 在这种情况下,整个应用程序中都会"Bob"更改字符串(对于声明为的字符串常量也是如此)。final
  • 您修改在子字符串操作中使用的字符串,或者是子字符串操作的结果。在Java中,获取字符串的子字符串实际上会使用与源字符串相同的基础字符数组,这意味着对源字符串的修改将影响子字符串(反之亦然)。
  • 您修改了恰好在某处地图中用作键的字符串。它将不再与原始值进行比较,因此查找将失败。

我知道这个问题是关于Java的,但是我不久前写了一篇博客文章,阐述了如果您在.NET中对字符串进行突变,那么程序的行为可能是多么疯狂。情况确实非常相似。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章