Символы

В Java для хранения символов используется тип данных char. Однако программистам на C/C++ следует помнить, что тип char в Java не эквивалентен типу char в С или С++. В C/C++ char — это целочисленный тип, имеющий ширину 8 битов. В Java это не так. Вместо этого в нем для представления символов используется Unicode. Unicode определяет международный набор символов, который может представлять все символы, присутствующие во всех известных языках. Он представляет собой унифицированный набор десятков наборов символов, таких как латиница, греческий алфавит, арабский алфавит, кириллица, иврит, японские и тайские иероглифы и множество других. Поэтому для хранения этих символов требуется 16 битов. Таким образом, в Java тип char является 16-битным. Диапазон допустимых значений этого типа — от 0 до 65536. Не существует отрицательных значений типа char. Стандартный набор символов, известный как ASCII, содержит значения от 0 до 127, а расширенный 8-битный набор символов, ISO-Latin-1 — значения от 0 до 255. Поскольку язык Java предназначен для обеспечения возможности создания программ, применимых во всем мире, использование кодировки Unicode для представления символов вполне обосновано. Конечно, применение Unicode несколько неэффективно для таких языков, как английский, немецкий, испанский или французский, для представления символов которых вполне достаточно 8 битов. Но это та цена, которую приходится платить за переносимость программ во всемирном масштабе.

Использование переменных типа char демонстрирует следующая программа:

// Демонстрация использования типа данных char.
class CharDemo {
public static void main(String args[]) {
char chl, ch2;
chl = 88; // код переменной X
ch2 = 'Y';
System.out.print ("chl и ch2: ") ;
System.out.println(chl + " " + ch2);

Эта программа отображает следующий вывод:

chl и ch2: X Y

Обратите внимание, что переменной chl присвоено значение 88, являющееся значением ASCII (и Unicode), которое соответствует букве X. Как уже было сказано, набор символов ASCII занимает первые 127 значений набора символов Unicode. Поэтому, все "старые трюки", применяемые при работе с символами в других языках, будут работать и в среде Java.

Хотя тип char был разработан для хранения символов Unicode, его можно считать также целочисленным типом, пригодным для выполнения арифметических операций. Например, он позволяет выполнять сложение символов или уменьшать значение символьной переменной. Рассмотрим следующую программу:

// Символьные переменные ведут себя подобно целочисленным значениям.
class CharDemo2 {
public static void main(String args[]) {
char chl;
chl = 'X';
System.out.println("chl содержит " + chl);
chl++; // увеличение значения chl на единицу
System.out.println("chl теперь " + chl);
)
}

Эта программа генерирует следующий вывод:

chl содержит X chl теперь Y

Вначале программа присваивает переменной chl значение X. Затем она увеличивает значение переменной chl на единицу. В результате хранящееся в переменной значение Становится буквой Y — следующим символом в последовательности ASCII (и Unicode).