Я разработчик C++, перемещающийся в Java. Проводя параллели между двумя языками, у меня есть некоторые сомнения относительно использования кучи в java.Переменное распределение в Java
Если мне не нужно сохранять переменную за пределами функции в C++, я бы просто выделил ее в стеке, и пусть стек вызовов позаботится о ее очистке. Таким образом, этот код является совершенно законным в C++,
std::unordered_map<std::string, int> map;
В Java, хотя, если я пишу подобный код,
HashMap<String, Integer> map;
компилятор дает мне предупреждение, что стоимость карты не инициализирован. Чтобы подавить предупреждение, я должен использовать,
HashMap<String, Integer> map = new HashMap<>();
Мои вопросы, это соглашение Java для нового до каждого объекта, даже если мне не нужно упорствовать его за пределы стека вызовов?
Это не конвенция. Это то, что вам нужно сделать, чтобы создать экземпляр объекта. – juanchopanza
Рядом со всеми объектами в Java создаются «новые». Вы не можете этого избежать. – khelwood
Да, Java имеет только (умные) указатели (сбор собранных мусора ссылок) для кучи объектов для определенных пользователем типов. Их невозможно создать в стеке. – Galik