почему ноль и нуль типа данных char рассматриваются как одинаковые в java

мне нужно выполнить некоторую задачу, проверив, имеет ли char нулевое значение и имеет ли char значение null '\ u0000, но не знаю, что компилятор java обрабатывает оба как одно и то же, вот пример кода

char nullTest = 0; 
System.out.println(nullTest == '\u0000'); //it is giving true

если я инициализирую его как nullTest = '0', то он дает false, но в моей программе я часто присваиваю числа и null '\u0000' этой переменной, из-за чего она дает ошибки времени выполнения,


person Junaid Ahmed    schedule 18.04.2019    source источник
comment
stackoverflow .com/questions/12195628/   -  person Ivan    schedule 18.04.2019
comment
if i initialize it as nullTest = '0' then it is giving false. Потому что '0' не 0. Он имеет какой-то (Unicode?) код, который отличается от 0. С другой стороны, '\u0000' по определению является символом с кодом 0. Я понятия не имею, почему вы называете это null.   -  person    schedule 18.04.2019
comment
@dyukha, 48.   -  person Andy Turner    schedule 18.04.2019
comment
вопрос в том, почему 0 и '\ u000' рассматриваются как одно и то же, как я могу относиться к ним по-разному, мы все знаем, что это две разные вещи,   -  person Junaid Ahmed    schedule 18.04.2019
comment
\u000 будет юникодным представлением символа с кодом ASCII 0. Не путайте с \u. На самом деле java читает юникод с этим префиксом   -  person Hasnain Ali Bohra    schedule 18.04.2019
comment
\u0000 задает символ с шестнадцатеричным значением 0000. Это определение этого синтаксиса. См. Спецификацию языка Java 3.2. Лексические переводы: Экран-код Unicode в форме \uxxxx, где xxxx – шестнадцатеричное значение, представляет собой кодовую единицу UTF-16 с кодировкой xxxx.   -  person Andreas    schedule 18.04.2019
comment
@JunaidAhmed они одинаковые. Разница только в представлении. Вы можете либо присвоить символ переменной char, либо ее коду ASCII или Unicode. char c = 51; и char c = '3'; присваивают одинаковое значение переменной c.   -  person Ivan    schedule 18.04.2019
comment
теперь понял, спасибо @ivan   -  person Junaid Ahmed    schedule 18.04.2019


Ответы (1)


Обозначение \uXXXX в основном встречается только в файлах .java и .properties. Там он читается как точка кода Unicode. Текст Unicode (=с использованием всех видов специальных символов) часто использует формат UTF-8 (хотя иногда также используются UTF16LE и UTF16BE).

Поэтому, если вы инициализируете символ в java с помощью char nullTest = 0; без указания одинарных кавычек, он внутренне обрабатывается как nullTest = unicode of 0, который равен '\u0000', но если вы инициализируете символ кавычками, такими как char nullTest= '0', он обрабатывается как символ строки и сохраняется как «0»

person Hasnain Ali Bohra    schedule 18.04.2019
comment
\uXXXX не является кодовой точкой Unicode. Это кодовая единица UTF-16. См. JLS 3.2. Лексические переводы: Экран-код Unicode в форме \uxxxx, где xxxx – шестнадцатеричное значение, представляет кодовую единицу UTF-16 с кодировкой xxxx. - person Andreas; 18.04.2019