2016-02-05 3 views
-2

Я просто выполнил ниже фрагмент кода,Почему компилятор не дает ошибку копилятора для кода ниже?

char a=5; 
System.out.println(a); 

Отпечаток оператор печатает ничего, кроме коробки квадратным, когда выполнены в затмении. Возможно, это дало ошибку компилятора? потому что вышеуказанный код не имеет никакого смысла. Пожалуйста, исправьте меня, если я ошибаюсь ..

+0

будет распечатывать значение ASCII 5. Это имеет смысл. –

+0

Символ определяется без кавычек char a = 5; –

+0

Пробуйте эту ссылку: [ASCII-значения] (http://ascii.cl/?wb48617274=5D681385) –

ответ

1

Код имеет смысл.

Вы создаете символ с кодовым номером Unicode 5 (то же, что и ASCII code 5), который является неприменимым символом.

Возможно, имеет смысл сделать это в других обстоятельствах (не печатать), и это, безусловно, имеет смысл с печатными символами.

Если вы хотите напечатать цифру «пять», вы могли бы сделать

char a = '5'; // using a character literal 
char b = 53; // using an integer literal (for the code point) 
0

Println печатает значение или объект. Печать одного символа - поддержка - см. https://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#print(char), поэтому нет причин для ошибки компилятора.

Он печатает символы с ASCII значением 5, которое не имеет представления в вашем шрифте, поэтому вы видите квадратный квадрат.

0

Вы назначаете целочисленное значение типу данных char и печатаете случайный символ, поскольку компилятор не может получить значение значения char «a».

0

char a=5; полностью действителен. В Java символ - это не просто одна буква, это также может быть числовое представление символа ASCII. 5 - «запрос». Если вы установили char a = 126, вы получите персонаж тильды.

1

char является целым числом без знака в диапазоне от 0 до 65535 (я думаю, это 0xFFFF), который печатает как символ Unicode, соответствующий это число, предполагается, что ваш компьютер поддерживает Unicode. Значения от 0 до 127 (0x7f) соответствуют исходному предшественнику Unicode (ASCII) и от 0 до 255 (0xff), расширенному ASCII.

char Значения уже являются целыми числами. Вы можете сделать арифметику с ними.

1

Вы назначаете код символа 5 переменной a. Взгляните на это ASCII Table. ASCII 5 непечатаем, если вы измените это значение на 35, например, оно распечатает #. Таким образом, Java (и другие языки) позволяют выполнять алгоритмы по символьным значениям.

char a = 35; 
    while (a < 100) { 
     System.out.println(a); 
     a++; 
    } 
5

char типа в Java имеет два значения, вроде. Это целочисленный тип (a char может иметь значения от 0 до 65535), но его целью является представление символов Unicode (по крайней мере, в базовой многоязычной плоскости). Если вы распечатаете его с помощью System.out.println, программа напечатает символ , представленный целым числом, а не целое.

Так как это целочисленный тип, вы можете назначить ему целое число.Например, поскольку символ 'A' представлен целым числом 65 в Unicode, операторы c = 65; и c = 'A'; полностью эквивалентны.

Так что в программе нет ничего противозаконного. Но символ 5 в Unicode (и ранее в ASCII) является «контрольным символом», который не отображается ни во что, когда вы его печатаете.

+0

'char' не ограничивается только BMP Unicode; Он может содержать UTF-16 [суррогат] (http://www.unicode.org/glossary/#surrogate_pair), которые используются парами для представления кодового слова Unicode. Поэтому вы не можете сказать, что он представляет персонажа, не зная, что это не суррогат. –

+0

Да, и я также не учитывал тот факт, что 65534 и 65535 не представляют символы Юникода. Конечно, эти детали не представляют интереса для ОП. – ajb

0

В этом коде отсутствует ошибка. Вы можете присвоить значение int переменной char. Если вы можете сделать цикл for с присвоением некоторых значений int, вы можете увидеть некоторые другие символы вместо полей.

Смежные вопросы