2015-07-31 3 views
0
//System.out.println("hii");'\uxxx' 

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

+1

Возможно, вам стоит взглянуть на этот вопрос (http://stackoverflow.com/questions/30727515/why-is-executing-java-code-in-comments-with-certain-unicode-characters- позволил). –

ответ

2

Unicode может быть представлен \uCODE, а не /uCODE. Если ваш юникод - новая строка, и вы пытаетесь написать что-то после юникода, это может показать вам ошибку времени компиляции. В противном случае встроенные юникоды комментируются в одиночном комментарии. Не нужно специально комментировать unicode.

//Compilation Error 
//System.out.println("hii"); \u000d Hello 

EDIT

Когда компилятор начинает он заменяет все Юникода символ с его значением включая символов комментария.

Так что в приведенном выше описании во время компиляции это будет.

//System.out.println("hii"); 
Hello 
+1

Вау, я удивляюсь, почему джавак не может прочитать это как простые персонажи. – Codebender

+0

Эй, на самом деле я хочу знать, почему он не комментирует unicode? –

3

Java позволяет использовать Unicode в исходном коде. В отличие от многих других языков, это позволяет делать это где угодно, в том числе, конечно, комментарии. И это позволяет ему в идентификаторах, а также, так что вы можете написать код Java юридический так:

String हिन्दी = "Hindi"; 

имя переменной является совершенно законным (хотя кодирование конвенции препятствовать такому использованию).

Что касается javac, то исходный код является Unicode. Проблема в том, что он может быть представлен различными кодировками, а некоторые редакторы не поддерживают Unicode, и есть места, где использование файла, отличного от ASCII, создаст проблемы.

Так что в коде можно использовать escape-коды Unicode. Это сделает файл полностью включенным в ASCII, несмотря на наличие идентификаторов или комментариев в Unicode. Вы можете заменить любой символ в коде эквивалентным escape-кодом Unicode. Даже «нормальные» символы, такие как ;. Например, следующая строка:

String s = "123"; 

Может быть написан как:

String s \u003d "123"\u003b 

И он будет составлен правильно и без каких-либо проблем. Фактически вы можете написать всю программу в экранах Unicode, включая новые строки. Компилятору Java просто все равно, если escape-код Unicode находится внутри литералов или самого источника.

Но Результатом этого является то, что компилятор должен интерпретировать Unicode ускользает первый, и только затем разбить источник на маркеры, такие как идентификаторы, операторы и комментарии, и после этого он проверяет синтаксис и т.д.

Это означает, что если у вас есть незаконная escape-последовательность Unicode в вашем источнике, она будет помечена как ошибка , хотя она находится внутри комментария, потому что на данный момент компилятор даже не знает, что конкретная часть кода смотрит на комментарий.

2

Когда спецификация языка Java была создана, стандарт Unicode был принят, а примитив char был определен как 16-битный тип данных, с символами в шестнадцатеричном диапазоне от от 0x0000 до 0xFFFF.

Также вы должны использовать "\ 0001" вместо "/ 0001".

1

javac convertts \u escapes перед тем, как он сделает что-нибудь еще, включая обработку комментариев. Поэтому, когда он видит:

\uxxx

идентифицирует это как недействителен побег Unicode и останавливает компиляцию с ошибкой.

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