Java - это , а не язык передачи по значению.Наоборот - это язык передачи по ссылке .(передача по ссылке не означает, что вы можете изменить исходный «указатель» так, чтобы он указывал в другом месте, как это позволяет C ++).Единственными вещами, которые передаются по значению, являются примитивы (int
, long
, char
и т. Д.)
Ссылки на объекты всегда передаются по ссылке - поэтому, если ваш объект способен поддерживать изменение его содержимого (например,через методы получения и установки) - это можно изменить.
String
определенно является неизменным - это означает, что его содержимое никогда не может быть изменено.Так что для вашего конкретного вопроса, если вы хотите, чтобы строка, на которую ссылается локальная переменная 's, изменилась, вам нужно предоставить ей ссылку на новый экземпляр String
объекта.
Пример:
public void one()
{
String s = "one";
s = two(); // Here your local variable will point to a new instance of a String with the value "two"
System.out.println(s);
}
public String two()
{
return "two";
}
Если вы используете объекты, отличные от String
, вы можете определить для них методы установки, которые обновят их содержимое.