Java-这个注释怎么这么奇怪

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,简直完美。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值