gpt4 book ai didi

reflection - 尝试使用反射修改字符串值时 JVM 崩溃

转载 作者:行者123 更新时间:2023-12-04 06:40:04 25 4
gpt4 key购买 nike

这是我的第一个问题,希望不要犯任何严重的错误。
假设没有 SecurityManager 阻止我这样做:

public static void main(String[] args) {
String str = "1";
System.out.println("str value before invoke fillStringValueWithX method: " + str);
fillStringValueWithX(str);
System.out.println("str value before invoke fillStringValueWithX method: " + str);
}

private static void fillStringValueWithX(String str) {
if (str != null) {
try {
Field fieldValue = String.class.getDeclaredField("value");
fieldValue.setAccessible(true);
char[] charValue = (char[]) fieldValue.get(str);
Arrays.fill(charValue, 'x');
fieldValue.setAccessible(false);
} catch (Exception e) {}
}
}

如果字符串的大小为 1(上面的示例),则 JVM 崩溃(崩溃转储显示 EXCEPTION_ACCESS_VIOLATION 错误)但是如果字符串的大小大于 1,则此代码段对我有用。

注:我假设通过反射设置字段值的适当用途是使用 valueField.set(obj, value) Field 方法,但我想知道为什么 JVM 崩溃...

谢谢

最佳答案

病人:大夫,大夫,我做这个很痛(用锤子敲打 ARM )。

医生:那你别这样。

你真的不应该试图弄乱字符串的内容。字符串被设计为不可变的。现在我敢说这是一个 JVM 错误,它会如此严重地崩溃(它不在我的机器上,顺便说一句 - 如果您告诉我们您使用的是哪个操作系统和 JVM 版本会很有用)但简单的答案是不要试图躲在系统的背后。

关于reflection - 尝试使用反射修改字符串值时 JVM 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4370042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com