Почему java имеет фиксированный размер типа данных в отличие от C - PullRequest
8 голосов
/ 05 декабря 2009

В C , поскольку мы знаем, что размер типов данных (например, int) может варьироваться в зависимости от компилятора / оборудования.

Но почему размер типов данных постоянен в языке Java? Почему у нас нет гибкости для разных размеров типов данных в Java в зависимости от компилятора?

Ответы [ 8 ]

19 голосов
/ 05 декабря 2009

JVM (виртуальная машина Java) разработана, чтобы быть независимой от платформы. Если размеры типов данных были разными на разных платформах, то кросс-платформенная согласованность приносилась в жертву.

JVM изолирует программу от базовой ОС и платформы. Это может усложнить жизнь для выполнения системно-ориентированной работы, но выгода заключается в том, что вы можете писать один раз, запускать где угодно (это в значительной степени верно, с некоторыми неприятными проблемами. Один раз писать, тестировать везде - гораздо более практичный подход) ).

14 голосов
/ 05 декабря 2009

Если размер типа данных различается на разных платформах, вы теряете переносимость.

3 голосов
/ 05 декабря 2009

Чтобы получить действительно исчерпывающий ответ на этот вопрос, вам понадобится много исторического чтения с первых дней существования Java. Конечно, дизайнеры могли бы включить более сложную систему примитивных типов. Однако когда Java вышла на широкую сцену, она была нацелена на апплеты. Код для запуска в браузере, организующий сложный пользовательский интерфейс, не должен (и не должен) знать, работает ли он на печально известном MNS-49 (7 7-битных символов на слово) или Honeywell 68000 (4 9 -бит символов за слово), или скучный современный процессор. Это гораздо важнее, чем кто-либо может кодировать битовую арифметику на int и знать, что произойдет после 32 смен.

1 голос
/ 05 декабря 2009

Идея Java заключалась в том, что «Пиши один раз, беги куда угодно» без перекомпиляции. Это означает, что каждая виртуальная машина имеет одинаковый размер данных. Конечно, на 64-битных машинах он использует 64-битные ссылки, но у вас нет доступа к ним, поэтому это не имеет значения.

Это работает довольно хорошо, но я бы хотел, чтобы мы могли получить 64-битные индексы массивов. Это на самом деле не имело значения в те времена, но для больших файлов с отображенной памятью это огромная боль. Вы должны разбить их на куски по 2 ГБ.

1 голос
/ 05 декабря 2009

Потому что это Java. См. спецификацию языка Java .

1 голос
/ 05 декабря 2009

Гибкость C для этого имеет некоторые преимущества (уменьшенное потребление памяти / хранилища, если вы используете 32 вместо 64 бит), но эти преимущества, как правило, становятся менее актуальными по мере улучшения аппаратного обеспечения (это было разработано в 70-х годах).

Однако эта гибкость сопровождается серьезной совместимостью и долговременными проблемами со зрением (ошибки 2038 года).

В отличие от этого, Java-объект в любом случае имеет некоторые накладные расходы на хранение, поэтому сохранение 4 байтов на каждом объекте Date было бы совершенно бессмысленным и только хлопотным.

0 голосов
/ 18 июля 2014

потому что Java - это независимый от платформы язык. поэтому в java размер типа данных фиксирован

0 голосов
/ 16 июля 2013
Язык

c имеет свое преимущество в изменении размера типа данных. в это время основной памяти не так уж много ... каждый программист должен писать код, оптимизированный для пространства.

в настоящее время пространство больше не является проблемой ... портативная программа гораздо предпочтительнее.

вот почему сделать java переносимым java не поддерживает типы данных разного размера

...