| средство | C++ | Java | комментарий |
|---|---|---|---|
| Глобальные переменные | программа= данные+функции | программа= иерархия классов | функция могла привести к широкомасштабным побочным эффектам |
| оператор goto | отсутствует | в Java мощный хорошо определенный встроенный механизм исключений | |
| Указатели или адреса в памяти | причина большинства ошибок | отсутствуют | Хотя в Java дескрипторы объектов и реализованы в виде указателей, в ней отсутствуют возможности работать непосредственно с указателями. |
| Распределение памяти | malloc(), free() new delete | сборщик мусора! | Сборщик мусора запускается каждый раз, когда система простаивает, либо когда Java не может удовлетворить запрос на выделение памяти. |
| типы данных | диапазон и точность типов зависит от реализации | диапазон и точность фиксированы | Поведение не должно изменяться при смене платформы |
| приведение типов | мощный, но ненадежный механизм | Дескрипторы объектов включают в себя полную информацию о классе | объекты в C++ - это просто указатели на адреса памяти; Java может выполнять проверку совместимости типов на фазе исполнения кода |
| списки аргументов | Интерфейс varargs для списков переменной длины | средство отсутствуют | проверка допустимости типов ложится на программиста |
| файлы заголовков | #include "name.h" | средство отсутствует тип и видимость встроены в байт-код | усложнение поддержки в больших системах |
| структуры | struct, union | отсутствуют | эти конструкции прикрывают критические и катастрофические машинно-зависимые ограничения по размеру и выравниванию данных |
| препроцессорная обработка | простая условная трансляция и макроопределения | отсутствуют | вместо #define N 100 -> final int N=100 |