Все объекты Java (все, кроме примитивов, таких как int
, float
, boolean
и т. Д.) являются ссылками на объект, на который указывают.
Так, например:
Foo f = new Foo();
Выше f
является ссылкой на объект типа Foo
.Если у вас есть функция:
void doSomething(Foo myFoo) { ... }
doSomething(f);
Функция doSomething()
получает тот же объект, на который ссылается f
.Так что, если doSomething()
видоизменяется f
, он изменяет этот объект.
В отличие от C ++, нет выбора между передачей по значению, ссылкой или использованием указателей: все переменные типа класса являются ссылками (или указателями в зависимостив точной терминологии).
Одна из проблем здесь заключается в том, что люди часто пытаются применить свои знания C ++ и терминологию к Java, что не работает.