Подтвердить что ты не робот

Java. Назначение апострофа юникода для char

Я хочу присвоить значение aphostrophe char:

char a = '\'';

Однако я хотел бы использовать unicode-версию apostrophe (\ u0027), чтобы поддерживать ее в соответствии с моим кодом:

char a = '\u0027';

Но делать это таким образом дает ошибку, говорящую "незамкнутый символьный литерал".

Как я могу выполнить это назначение, сохраняя код кода unicode в коде?

4b9b3361

Ответ 1

Причина \u0027 не работает, так это то, что escape-код unicode обрабатывается очень рано компилятором, и, конечно же, он заканчивается ' — который завершает литерал. Компилятор действительно видит это:

char a = ''';

... что естественно является проблемой. JLS говорит об этом по отношению к линейным каналам и тому подобное в §3.10.4 (символьные литералы).

Честно говоря, я думаю, что лучше всего писать

char a = '\'';

... но char является числовым типом, поэтому вы можете сделать это:

char a = 0x0027;

Конечно, вы можете сделать это:

char a = "\u0027".charAt(0);

... но я думаю, мы все можем согласиться, что немного переборщить.; -)

Oooh, или зайдите Greg answer: char a = '\u005c\u0027'; (\u005c, конечно, обратная косая черта — поэтому компилятор видит '\'').

Ответ 2

Вы также можете сделать это

char a = '\u005c\u0027';

где \u005c является Unicode для\

Ответ 3

прежде чем javac сделает что-нибудь еще, он сначала преобразует все \u #### в char. поэтому ваш код эквивалентен

char a = ''';

почему он не компилируется.

\ u #### не только для char/строковых литералов, вы можете использовать его в любом месте, например. в именах переменных.

однако люди редко используют латинские символы в идентификаторах; если кто-то это сделает, он, вероятно, будет использовать свою собственную кодировку, и ему тоже не понадобится \u ####.

поэтому мы никогда не видим \u #### где угодно, кроме как в char/строковых литералах, это дает неправильное впечатление непредвиденному.

Если есть машина времени, мы, вероятно, должны убить эту функцию, так как она запутывает и не используется.

Ответ 4

Здесь другой вариант, действительно, перебор:

char c = "\u0027".charAt(0);