1) Строки - это объекты, которые обычно содержат массив char
и длину строк. Массив символов обычно реализуется как непрерывный массив из 16-битных слов, каждый из которых содержит символ Unicode в собственном порядке байтов.
2) Назначение символьного значения целому числу преобразует 16-разрядный код символа Юникода в его целочисленный эквивалент. Таким образом, 'c'
, который равен U + 0063, становится 0x0063
или 99.
3) Поскольку каждый String
является объектом, он содержит другую информацию, кроме своих членов класса (например, слово дескриптора класса, слово блокировки/семафора и т. Д.).
ADENDUM
Объект содержание зависит от реализации JVM (которая определяет присущие накладные расходы, связанные с каждым объектом), и как класс фактически кодируется (то есть, некоторые библиотеки могут быть более эффективными, чем другие).
ПРИМЕР
Типичная реализация будет выделять накладные расходы двух слов в экземпляре объекта (для дескриптора класса/указателя, и семафор/блокировка управляющего словом); a String
объект также содержит длину int
и ссылку на массив char[]
. Фактическое содержимое символа строки хранится во втором объекте, массив char[]
, которому в свою очередь выделяются два слова плюс слово длины массива, а также столько же 16-разрядных элементов char
, сколько необходимо для строки (плюс любые дополнительные символы которые оставались висящими, когда была создана строка).
ДОПОЛНЕНИЕ 2
Случай, один символ представляет символ один Unicode только верно в большинстве случаев. Это означало бы кодирование UCS-2 до 2005 года. Но теперь Unicode стал больше, а строки должны быть закодированы с использованием UTF-16, где, увы, один символ Unicode может использовать дваchar
s на Java String
.
Посмотрите на фактический исходный код для реализации Apache, например. at:
http://www.docjar.com/html/api/java/lang/String.java.html
Вы должны рассмотреть возможность их разбиения на отдельные вопросы, так как они действительно очень разные. # 2, вероятно, можно ответить здесь: http://stackoverflow.com/questions/1490218/utf-16-to-ascii-conversion-in-java – 2010-12-15 18:05:48