У меня есть следующий код, который имеет измененный класс Person, String и метод для изменения экземпляров String и Person
class Person{
int a = 8;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
@Override
public String toString() {
return "Person [a=" + a + "]";
}
}
-
public class TestMutable {
public static void main(String[] args)
{
Person p = new Person();
p.setA(34);
String s = "bar";
modifyObject(s, p); //Call to modify objects
System.out.println(s);
System.out.println(p);
}
private static void modifyObject(String str, Person p)
{
str = "foo";
p.setA(45);
}
}
Вывод выполняется так, как ожидалось. Он печатает
bar
Person [a=45]
Теперь, мой вопрос:
Что происходит в месте, где вы говорите str = "foo" ?
Предположим сначала, что s = 'bar' и данные находятся в памяти 0x100
Теперь ссылка на строку передается другому методу, другой метод пытается изменить содержимое ячейки памяти (0x100) на "foo", используя s = "foo". Это то, что происходит, или "foo" создается в различной памяти?
Выполняет ли java ссылки по значению?