Java 对 Unicode转义字符不会进行任何特殊的处理,只是简单的将其替换称相应的字符。
例如"\u000a"会被替换为换行符"\n","\u002b"会被替换为"+"。
public class Demo {
public static void main(String[] args) throws ParseException {
// 这是注释\nSystem.out.println("Hello World");
// 这是注释\u000aSystem.out.println("Hello World");
}
}
如上面的代码会打印出"Hello World",就是因为将注释中的"\u000a"字符串解析成了换行符"\n",但单独在注释代码中室友换行符"\n"那么仅仅是普通字符,只有是Unicode值时才会生效。
我们查看Demo类被编译后的代码如下,发现Demo.class文件中确实"\u000a"后面的代码被换行并且执行了。
public class Demo {
public Demo() {
}
public static void main(String[] args) throws ParseException {
System.out.println("Hello World");
}
}
例如下面代码中的Unicode值也会得到执行,结果是"5 + 10 = 15"。
public class Demo {
public static void main(String[] args) throws ParseException {
System.out.println("5 + 10 = \u0022+ (5+10) + \u0022");
}
}
编译后的Demo.class为:
public class Demo {
public Demo() {
}
public static void main(String[] args) throws ParseException {
System.out.println("5 + 10 = 15");
}
}
实际上"\u0022"被解释为双引号,所以它的执行过程是这样的:
public class Demo {
public static void main(String[] args) throws ParseException {
System.out.println("5 + 10 = \u0022+ (5+10) + \u0022");
System.out.println("5 + 10 = " + (5 + 10) + "");
System.out.println("5 + 10 = " + 15 + "");
}
}
除了上面这些Unicode值之外,大部分Unicode值都会被替换成其对应的字符,无论是中文字符还是英文或数字字符。
我们可以通过unicode中文互转网站来讲中文字符转换成Unicode值。
将这串Unicode值放在Java代码中也会被执行。
public class Demo {
public static void main(String[] args) {
System.out.println("\u6211\u7231\u004a\u0061\u0076\u0061");
}
}
可以看到编译后的Demo.class的内容如下:
public class Demo {
public Demo() {
}
public static void main(String[] args) {
System.out.println("我爱Java");
}
}
但如果我们只是单纯的在字符串中使用"\u000a",就会报错。但在注释中使用却没有任何问题。
注意:在Java中'\n'是一个字符,而不是一个字符串(即两个字符'\'和'n')。
所以'\n'的Unicode值就是'\u000a',而不要把它当作一个字符串去计算它的Unicode值。