Stringの代わりにStringBufferを使用すると、問題が解決します。
public static void main(String[] args) {
StringBuffer s = new StringBuffer("Hello");
changeString(s);
String res = s.toString();
//res = "HelloWorld"
}
private static void changeString(StringBuffer s){
s.append("World");
}
または、本当に文字列のみを使用する必要がある場合は、リフレクションを使用した解決策を次に示します。
public static void main(String[] args) {
String s = "Hello";
changeString(s);
String res = s;
//res = "HelloWorld"
}
private static void changeString(String s){
char[] result = (s+"World").toCharArray();
try {
Field field = s.getClass().getDeclaredField("value");
field.setAccessible(true);
field.set(s, result);
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException |
IllegalAccessException e1) {
e1.printStackTrace();
}
}