查询Java中无效的字符文字

时间:2014-06-23 12:04:52

标签: java

我了解到,以下四行中的字符文字无效。

char ch1 = '\u000a'; //Line feed
char ch2 = '\u000d'; //Carriage return
char ch3 = '\u0027'; // ' character
char ch4 = '\u005C'; // \ character

我的问题:

我想了解,为什么这些字符文字无效?

3 个答案:

答案 0 :(得分:5)

它们不是无效的,真正发生的是源解析器在开始解析代码的词法标记之前转换所有\uXXXX次事件;所以,例如,如果你有类似char ch1='\u000a'; //Line feed的东西,解析器会将你的源代码转换成这样的东西:

char ch1 = '
'; //Line feed

这是语法错误。

就像练习一样,这样做:

System.out.println("Hola mundo\u0022);

它会编译,因为\u0022是双引号,所以上面的代码转换为:

System.out.println("Hola mundo");

答案 1 :(得分:2)

换行意味着向前移动一行。代码是\ n。回车意味着将光标移动到行的开头。代码是\ r。

在运行编译器之前预先处理Unicode转义。因此,如果您将\ u000A放在这样的字符串文字中:

char ch1 = ''; //Line feed  
//will be compiled as 
char ch1 = '
';

char ch2 = '\u000d'; //Carriage return
//will be compiled as
'char ch2= ';

char ch3 = '''; // ' character
//will be compiled as 
char ch3=''';

char ch4 = '\u005C'; // \ character
//will be compiled as
char ch4='\';

所以这些在编译时都是错误的

答案 2 :(得分:1)

因为这些文字实际上是在编译时间之前翻译的(无论是字符文字还是字符串);因此,第一个例子给出:

char ch1 = '
';

这是无效的语法。

但这不是字符串中的问题。你可以写:

String s = "\u000a";

自:

String s = "
";

有效的语法。