冷知识-神奇的【Unicode】 \u000d之流

大家好,我是杨仔(以前大家都这样叫我^^)。

什么,你说java代码被注释了就不会被执行?

神奇的 Unicode
package com.xx;
import org.junit.Test;

public class EnterTest {

    @Test
    public void test() {
        String a = "1";
        // \u000d a="2";
        System.out.println(a);
    }
}

猜想一下这段代码会输出什么呢?
运行一下:
在这里插入图片描述

再来看看这段代码,你会不会认为它是一个空方法?

package com.xx;

public class UnicodeTest {
    public static void main(String[] args) {
        // \u000d \u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0022\u0031\u0032\u0033\u0022\u0029\u003b
    }
}

运行一下:

在这里插入图片描述


是不是感觉见鬼了?

问题就出在了 \u000d 等Unicode上面了,\u000d等看上去就知道是一个Unicode字符,\u000d转换十进制以后发现它代表一个换行符,直接效果就是引起注释逃逸!

那么这个时候答案就出来了,Java的编译器不仅会去编译代码, 也会去解析Unicode字符。

上面两段代码转换为代码就是:
在这里插入图片描述

在这里插入图片描述

总结:java的编译器不仅会去编译代码,也会去解析Unicode字符;

【文本与Unicode互转】 https://tool.chinaz.com/tools/unicode.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值