Что это значит, учитывая
class Foo {
private int bar;
public void setBar(int value) {
bar = value;
}
public int getBar() {
return bar;
}
}
А
public void doSomethingToFoo(Foo foo) {
foo.setBar(42);
}
Изменение на bar
будет видно на месте вызова. Это - это манипуляция, которая торчит. Была передана ссылка на исходный объект. Для этого объекта был вызван установщик, поэтому получатель в месте вызова вернул бы новое значение bar.
Foo foo = new Foo();
doSomethingToFoo(foo);
int bar = foo.getBar(); // gets 42
Однако, учитывая
public void doSomethingElseWithFoo(Foo foo) {
foo = new Foo(); // assigning new instance to variable
foo.setBar(117);
}
Это изменение будет не видимым на месте вызова, поскольку переменная foo
внутри метода была переназначена. Ссылка была просто передана по значению, переменные на самом деле не связаны и не связаны каким-либо образом, они просто имели общее значение (ссылку). Теперь мы перезаписали ссылку, которая была у одной переменной внутри метода, переменная в месте вызова имеет ту же ссылку, что и раньше.
Foo foo = new Foo();
foo.setBar(7);
doSomethingElseWithFoo(foo);
int bar = foo.getBar(); // still is 7!
Имеет ли это смысл?