Все Объекты Java распределяются динамически. Вы всегда передаете ссылки на них. Так устроен язык. Когда вы делаете:
ClassA obj = new ClassA();
Затем объект размещается в куче и ссылка на него сохраняется в стеке (конечно, при условии, что это внутри метода). Это означает, что вы всегда можете передавать объекты, не беспокоясь о том, где они хранятся.