Почему персонаж в Java занимает в два раза больше места для хранения в качестве символа в C?Размер символов в Java по сравнению с C
ответ
В символах Java 16-бит и C они 8-бит.
Более общий вопрос: почему это так?
Чтобы узнать, почему вы должны смотреть на истории и прийти к выводам/мнения по этому вопросу.
Когда C был разработан в США, ASCII был довольно стандартным, и вам понадобятся только 7 бит, но с 8 вы можете обрабатывать некоторые не-ASCII-символы. Это может показаться более чем достаточно. Многие текстовые протоколы, такие как SMTP (электронная почта), XML и FIX, по-прежнему используют только символ ASCII. Электронная почта и XML кодируют символы не ASCII. Двоичные файлы, сокеты и поток по-прежнему являются только 8-разрядными байтами.
КСТАТИ: C может поддерживать более широкие символы, но это не обычная char
Когда Java был разработан 16-разрядные казалось, достаточно для поддержки большинства языков. С тех пор unicode был расширен до символов выше 65535, и Java пришлось добавить поддержку кодовых точек, которые являются символами UTF-16, и может быть одним или двумя 16-разрядными символами.
Итак, создавая byte
байт и char
, значение 16-битного значения без знака было определено в то время.
BTW: Если ваш JVM поддерживает -XX:+UseCompressedStrings
, он может использовать байты вместо символов для строк, которые используют только 8-битные символы.
Ну, теперь это больше нравится :) +1 –
Подробнее @
Чтобы быть точным, в C они * как минимум * 8-битный. –
Java char - это кодовая точка в кодировке Unicode, кодированная UTF-16, в то время как C использует кодировку ascii в большинстве случаев.
Стандарт C не предусматривает ASCII. –
Также символ Java не является «символом юникода». –
Правильно, это кодовый блок UTF-16. –
Поскольку Java использует Unicode, C обычно использует ASCII по умолчанию.
Существуют различные варианты кодировки Unicode, но Java использует UTF-16, который использует один или два 16-разрядных блока кода за символ. ASCII всегда использует один байт на символ.
UTF-16 не использует два байта на символ. –
Извините, «по крайней мере» два байта на символ. – DNA
Платформа Java 2 использует UTF-16 представление в массивы символов и в строки и классы StringBuffer.
Java это современный язык, так он поддерживает Unicode по умолчанию, как много новых языков сегодня (например, C#). Напротив, C является «древним» языком с эпохи 7-битного ASCII, поэтому по умолчанию используется 8-битный символ.Когда вы приходите в Юникод раз, для того, чтобы не делать старые разрывы кода, они решили использовать другой тип символа, который является wchar_t
- 1. Строители в Java по сравнению с C++?
- 2. Деструкторы в C++ (по сравнению с java)
- 3. Создание объекта Java по сравнению с C#
- 4. Java generics по сравнению с шаблонами C++
- 5. C/C++ по сравнению с Java/C# в высокопроизводительных приложениях
- 6. массив символов по сравнению с указателем полукокса
- 7. По сравнению с текстовыми файлами в java
- 8. C++: станд :: вектор :: изменить размер по сравнению с «нормальными» распределениями
- 9. C# дженериков по сравнению с шаблонами C++
- 10. Размер битового поля по сравнению с полукокса
- 11. Размер файла Rdata по сравнению с csv
- 12. Различные кодировки UTF-16 в Java по сравнению с C#
- 13. бит операции в java, по сравнению с c
- 14. Обратная совместимость в Java по сравнению с C++
- 15. модификаторы доступа в Java по сравнению с C++
- 16. Произвольный тип сортировки в C++ по сравнению с Java-генераторами
- 17. Кодировка UTF-16 в Java по сравнению с C#
- 18. Перечисления Java по сравнению с статическими константами
- 19. Поведение фейсов PHP по сравнению с C
- 20. Java: многомерный массив по сравнению с одномерной
- 21. Длина символов в шаге данных по сравнению с proc sql
- 22. C++/CLI: Преимущества по сравнению с C#
- 23. Неуправляемый C# по сравнению с C++
- 24. Groovy по сравнению с Java синтаксиса несовпадения
- 25. Эффективность памяти Java по сравнению с Cython
- 26. По сравнению с Object in C#
- 27. Нарезка в C по сравнению с Python
- 28. Переопределение по сравнению с переопределением в C++
- 29. Потоки C++ по сравнению с потоками .NET?
- 30. (C/C++) Размер массива символов
Можно было бы ответить на вопрос, как можно, чтобы вы знали достаточно, что они разные, но не идут в следующий шаг и выяснить, почему? –
Java в два раза эффективнее C++, и мощность должна исходить откуда-то ... –
@KerrekSB Но он может иметь 256x символов. ;) –