Java классы - при создании объекта внутри класса или создании поля над объектом(без new)?

Никак не пойму разницы, есть ли вообще она? Можно просто объявить поле над объектом внутри класса, а можно создать через new. Если разница есть, тогда интересно - в случае, когда объявляется поле над объектом, заполняется ли место в heap(мы ведь не использовали new)?

`public class Box{
    double radius;
    String color;
    Ball ball = new Ball();
    //Хотя результат получается тот же при создании просто поля над объектом Ball ball;
}`

Ответы (1 шт):

Автор решения: Tokamo
Ball ball;

В данном случае создается переменная объектного типа, но сам объект еще не создан. Память выделяется в стеке.

ball = new Ball();

Тут уже создается объект Ball и выделяется под него память в куче, а ball является ссылкой на этот объект.

Ball ball = new Ball;

Более быстрый вариант. Сразу создали объект.

Память под ссылку выделяется в стеке, а под объект в куче

→ Ссылка