我了解到,以下四行中的字符文字无效。
char ch1 = '\u000a'; //Line feed
char ch2 = '\u000d'; //Carriage return
char ch3 = '\u0027'; // ' character
char ch4 = '\u005C'; // \ character
我的问题:
我想了解,为什么这些字符文字无效?
答案 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 = "
";
是有效的语法。