Все изменяемые объекты, которые вы передаете методам, могут быть изменены, а оригинал изменится. Проблема в том, что строку нельзя изменить - она неизменна.
Передайте объект, который можно изменить.
Если вы хотите изменить «версию», тогда передайте вашему классу «MetaData» метод .setVersion () и передайте «MetaData» вашему методу. Ваш метод будет вызывать metaData.setVersion ("I'm NEW"); и все будут счастливы.
public void willWorkFine (Metadata metaData) {
metaData.setVersion("Changed!");
}
Что вы не можете сделать, это передать "версию" методу, ожидающему строку, и переназначить его:
public void wontWork(String changeMe) {
changeMe="not changed!";
}
Поскольку changeMe - это просто локальная ссылка на исходный объект «версия», переназначение вашей локальной ссылки для указания на другой объект не влияет на внешнюю программу.