Java 文字列プールをリフレクションと組み合わせると、Java で想像を絶する結果が生じる可能性があります。
import java.lang.reflect.Field;
class MessingWithString {
public static void main (String[] args) {
String str = "Mario";
toLuigi(str);
System.out.println(str + " " + "Mario");
}
public static void toLuigi(String original) {
try {
Field stringValue = String.class.getDeclaredField("value");
stringValue.setAccessible(true);
stringValue.set(original, "Luigi".toCharArray());
} catch (Exception ex) {
// Ignore exceptions
}
}
}
上記のコードは以下を出力します:
"Luigi Luigi"
マリオはどうした?