Несоответствие в отношениях между Java и C

Пожалуйста, прости меня, если мой вопрос кажется довольно нубистским. Это мой первый вопрос здесь.

У меня в голове простой запрос. Язык Java был реализован с использованием C и C++.

Мой вопрос

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

int c=10;
printf("%f",c);    // unspecified behaviour

Принимая во внимание, что в Java, если мы используем похожую концепцию для печати числа с использованием другого спецификатора формата, мы получаем IllegalFormatConversionExceptoion,

Деталь исключения:-

Исключение в потоке "main" java.util.IllegalFormatConversionException: f!= Java.lang.Integer

Мой вопрос:

Почему такая разница между Java и C, хотя Java является производной от C!

Пожалуйста, очистите мои сомнения. Я буду благодарен вам, гении...

2 ответа

Решение

printf в Java вдохновлен тем же методом в C, но работает совершенно по-другому. Если вы даете это BigDecimal например, он напечатает его, даже если C не имеет BigDecimal.

Короче говоря, то, что Java похожа на C, не означает, что она использует те же базовые функции. В большинстве случаев Java имеет свои собственные реализации для обеспечения;

  • определенное поведение
  • это согласуется с тем, как используется Java.
  • работает одинаково на всех платформах ОС.

Почему такая разница между Java и C, хотя Java является производной от C

Почему бы и нет? Почему это вообще имеет значение?

Позвольте мне привести другой пример. Глагол "изготовлять" буквально означал "сделанный человеком", но сегодня он почти означает противоположное. То, что один язык является производным от другого, не означает, что они должны быть одинаковыми.

Потому что исторически printf Функция вызывает всевозможные головные боли, когда указатели формата неверны или отсутствуют аргументы. Таким образом, языки, производные от C, в частности C++ и Java, пошли на необычайную длину, чтобы избежать printf проблема.

В то же время, C-компиляторы были улучшены, чтобы понять, как printf работает и генерирует предупреждения при неправильном использовании. Следовательно printf проблема больше не существует по большей части (если вы не игнорируете / отключаете предупреждения).

Другие вопросы по тегам