Пожалуйста, простите меня, если мой вопрос кажется довольно noobish. Это мой первый вопрос.
У меня есть простой вопрос в моем сознании. Язык Java реализован с использованием C и C++.
Мой вопрос:
В языке C поведение форматирования C не определено для использования разных модификаторов, чем данный тип данных.
int c=10;
printf("%f",c); // unspecified behaviour
Если в Java, если мы используем аналогичную концепцию для печати номера с использованием другого спецификатора формата, мы получаем IllegalFormatConversionExceptoion
.
Исключительная информация: -
Исключение в потоке "main" java.util.IllegalFormatConversionException: f! = Java.lang.Integer
Мой вопрос:
Пожалуйста, очистите мои сомнения. Я буду благодарен вам гениям...
printf
в Java вдохновлен тем же методом в C, но работает совершенно по-другому. Если вы дадите ему BigDecimal
например, он напечатает его, даже если C не имеет BigDecimal.
Короче говоря, только потому, что Java похожа на C, не означает, что она использует одни и те же базовые функции. В большинстве случаев Java имеет собственные реализации для обеспечения;
Почему так разница между Java и C, хотя Java является производной от C
Почему нет? Почему это вообще имеет значение?
Позвольте мне привести вам другой пример. Глагол "изготовления" буквально означал человека, и все же сегодня он почти означает противоположность. Просто потому, что один язык происходит от другого, это не значит, что они должны быть одинаковыми.
Поскольку исторически функция printf
вызывала всевозможные головные боли, когда спецификаторы формата были неправильными или отсутствовали аргументы. Поэтому языки, полученные из C, в частности C++ и Java, пошли на необычные длины, чтобы избежать проблемы с printf
.
В то же время компиляторы C были улучшены, чтобы понять, как работает printf
, и генерировать предупреждения, когда они используются неправильно. Следовательно, проблема printf
больше не существует (если вы не игнорируете/запрещаете предупреждения).