Почему Java не поддерживает указатели?
Большинство исследований согласны с тем, что указатели являются одной из основных функций, которые позволяют разработчикам вводить ошибки в свой код. Когда Java была создана, было сделано намерение создать язык, который легко изучить и не подвержен ошибкам, с которыми склонен C ++. Это не похоже на c / c ++, где мы должны управлять управлением памятью деструкторами. В Java автоматическая сборщик мусора работает для управления памятью. На самом деле ссылки Java являются указателями, поэтому все в Java доступно только через указатели.
Некоторые причины для Java не поддерживают указатели:
1. Доступ к памяти через арифметику указателя: это принципиально небезопасно. Java обладает надежной моделью безопасности и по той же причине запрещает арифметику указателя. Виртуальной машине было бы невозможно гарантировать, что код, содержащий арифметику указателя, безопасен без дорогостоящих проверок времени выполнения.
2. Безопасность. Не позволяя указателям, Java эффективно предоставляет другой уровень абстракции разработчику. Никакая поддержка указателей не делает Java более безопасным, поскольку они указывают на местоположение памяти или используются для управления памятью, которая теряет безопасность, поскольку мы используем их напрямую.
3. Передача аргумента по ссылке: передача ссылки, которая позволяет вам изменять значение переменной в области вызова. Java не имеет этого, но это довольно редкий случай использования и может быть легко выполнен другими способами. Это в целом эквивалентно изменению поля в области объекта, которое могут видеть как вызывающий, так и вызываемый.
4. Ручное управление памятью: вы можете использовать указатели для ручного управления и выделения блоков памяти. Это полезно для некоторых более крупных приложений, таких как игры, драйверы устройств и т. Д., Но для объектно-ориентированного программирования общего назначения это просто не стоит усилий. Java вместо этого обеспечивает очень хорошую автоматическую сборку мусора (GC), которая занимается управлением памятью.