深入理解 Java 中的转义符: \u000a\u0022

Java 对 Unicode 转义字符不会进行任何特殊的处理,只是简单的将其替换称相应的字符!

因此,在编写代码时,任何出现 Unicde 字符串的地方,都要额外注意,倍加小心,要知道 Java 词法是如何解析的?转移后的代码是否合法?逻辑上是否正确?

Unicode 特殊字符含义
\u000a换行符 \n
\u007d{
\u007b}
\u0022"
\u002b+

示例一 :

public void test(){
	// 这是注释\u000a System.out.println("被注释的代码,不应该打印");
}

执行上面的函数,会发现,被注释掉的代码竟然被执行了,因为 \u000a 出现在代码中,在词法解析时,此处发生了换行,而解析后得到的代码如下:

public void test(){
	// 这是注释
System.out.println("被注释的代码,不应该打印");
}

因此,后面的代码会被执行。

示例二:

public void test2(){
	System.out.println("5 + 10 = \u0022+ (5+10) + \u0022");
}

打印的信息为 5 + 10 = 15,因为字符串中添加了 unicode 字符,被解析后得到的真实函数如下:

public void test2(){
	System.out.println("5 + 10 = " + (5+10) + "");
}

因此代码执行的结果会有所不同。

也正是因为如此,当字符串中出现 \u000a 时,会出现编译错误,报错的内容为: java: 未结束的字符串文字illegal escape character in string literal

例如:

public void test2(){
	System.out.println("\u000a"); // 编译错误
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值