Неизменяемый и передается по значению

У меня есть следующий код, который имеет
изменяемый класс Person, String и метод для изменения экземпляров of 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 ссылки по значению?

9
задан Eng.Fouad 16 January 2013 в 10:36
поделиться