Java-这个注释怎么这么奇怪?
首先来看看下面的代码,简单到main
方法中只有一行注释。
public static void main(String[] args) {
// \u000d System.out.println("Hello world!");
}
猜猜看,这段程序运行结果如何?执行后它居然会在控制台打印:
Hello world!
那么这究竟是怎么回事呢?
其实原理就在于大家熟悉的unicode
编码,上面的\u000d
就是一个unicode
转义字符,它所表示的是一个换行符。而java中的编译器,不仅会编译代码,还会解析unicode
编码将它替换成对应的字符。所以说,上面的代码解析完后实际是这样的:
public static void main(String[] args) {
//
System.out.println("Hello world!");
}
这样,就能解释为什么能够执行注释中的语句了。
当然,你也可以把代码写成以下这个样子:
public static void main(String[] args) {
int a=1;
// \u000d \u0061\u002b\u002b\u003b
System.out.println(a);
}
执行结果会打印2
,同理,因为后面的unicode
编码的转义后表示的是a++;
。
你这么写的话客户如果懂点代码,看一下就穿帮了啊,但是你如果写成下面这样,大部分估计都以为这是一段乱码:
//\u000d\u0054\u0068\u0072\u0065\u0061\u0064\u002e\u0073\u006c\u0065\u0065\u0070\u0028\u0032\u0030\u0030\u0030\u0029\u003b
这个代码没个几十年的功力真看不出来这里执行的是sleep
,简直完美。