Краткий ответ: да, при условии, что getcard
фактически помещает свой параметр в какое-то приватное поле в классе Player
.
Длинный (er) ответ: В Java вам доступны только две вещи - примитивы и ссылки. Примитивы - это числовые типы, символы и логические значения. Все остальное является объектом, а все объекты являются ссылками. Итак, когда вы пишете
Foo f = new Foo();
новый объект типа Foo
создается в куче (для сбора мусора), а в стек помещается ссылка, которую вы также можете считать «указателем». Тем не менее, язык Java дает вам несколько реальных способов изучения этой ссылки (например, вы не можете привести ее к указателю или long
), так что вы можете просто думать о ней как о непрозрачном дескрипторе.
Итак, когда вы пишете
player.getcard(deck.draw())
звонок
deck.draw()
возвращает ссылку на объект типа Card
, и этот объект передается методу player.getcard
. Затем, если класс Player
выглядит примерно так:
public class Player {
private List<Card> cards;
// ...
public void getcard(Card card) {
cards.add(card);
}
}
затем последующие вызовы методов в Player
, которые обращаются к приватному полю cards
, увидят, что возвращаемое значение deck.draw()
было добавлено к cards
.