【java解惑】Unicode转义字符的使用(续)

如下所示代码:

public class Example016 {

	public static void main(String[] args) {
		char c = 0x000a;
		/**
		 * \u000A 注释1
		 */
		// \u000A 注释2

		System.out.println("c = " + c);
		System.out.println("a new line");
	}
}

结果:

编译时,提示注释2出现错误,导致无法正确编译。

结果分析:

   java编译器不仅会在将程序解析成为符号之前把Unicode转义字符转换成它们所表示的字符,而且它是在丢弃注释和空格之前做这些事的。也就是说,编译器在编译上述代码时,会首先将\u000A 转化为换行。对于注释1来说,换行后不影响注释;对于注释2来说,换行后,“注释2”这个字符就会换到下一行作为正式代码的一部分,这样自然不能正确编译。

从《Unicode转义字符的使用》两篇博文中,我们可以总结到:Unicode转义字符绝对会产生混乱。除非确实是必需的,否则就不要使用Unicode 转义字符。它们很少是必需的。

(注:本【java解惑】系列,均是博主阅读《java解惑》原书后,将原书上的讲解和例子部分改编,然后写成博文进行发布的。所有例子均亲自测试通过,并共享在github上。通过这些例子,激励自己,惠及他人。同时,本系列所有博文会同步发布在博主个人微信公众号(搜索“爱题猿”或者“ape_it”),方便大家阅读。如果文中有任何侵犯原作者权利的内容,请及时告知博主,以便及时删除;如果读者对文中的内容有异议或者问题,欢迎通过博客留言或者微信公众号留言等方式共同探讨。)

源代码地址:https://github.com/rocwinger/java-disabuse

时间: 2024-10-17 18:33:23

【java解惑】Unicode转义字符的使用(续)的相关文章

【java解惑】Unicode转义符的使用

如下所示代码: public class Example014 { public static void main(String[] args) { /**  * it is a test for \utest.  */ // \u0022 是双引 号的 Unicode 转义字符 System.out.println("a\u0022.length() + \u0022b".length()); } } 结果说明: 上述程序有编译错误.如果删除多行注释,则编译错误消除,输出结果为2.

【java解惑】java中那些反常识的小知识(续)

六.Q:请为 i!=0 && i ==-1 提供一个声明,使得其成立. 分析:在布尔表达式(i != 0 && i == -i)中,一元减号操作符作用于 i,这意味着它的类型必须是数字型的:一元减号操作符作用于一个非数字型操作数是非法的.因此,我们要寻找一个非 0 的数字型数值,它等于它自己的负值.NaN 不能满足这个属性,因为它不等于任何数值,因此,i 必须表示一个实际的数字.肯定没有任何数字满足这样的属性吗?嗯, 没有任何实数具有这种属性,但是没有任何一种 Java 数

《Java解惑》读书笔记

 摘选自<Java解惑>一书,之前整理了部分,一直没看完,最近为了督促自己每天读点这本书,决定一天至少更新一个谜题的内容,欢迎讨论. 欢迎关注技术博客http://blog.sina.com.cn/u/1822488043 Java解惑读书笔记 谜题1:奇数性 取余操作的定义: ( a / b ) * b + ( a % b ) = a 其中(a/b)是java运算的结果,也就是a/b是一个整数,比如3/2=1. 所以当取余操作返回一个非零结果的时候,它与左操作数具有相同符号. 请测试你的

Java中的转义字符

转义字符 Unicode表示方式 功能解释 \b \u0008   退格符 \n \u000a 换行符 \r \u000d 回车符(可以换行) \t \u0009 空格符 \"  \u0022 双引号 \'    \u0027    单引号 \\ \u005c 反斜线 换行符在不同的系统下有不同的形式:\n:   Mac os下的文本文件换行符   \r:   unix下的文本文件换行符   \r\n:   windows下的文本文件换行符 按类型分: 1.八进制转义序列:\ + 1到3位5数字

[Java解惑]字符串

字符串... 13 19.      char类型相加... 13 20.      程序中的Unicode转义字符... 14 21.      注释中的Unicode转义字符... 14 22.      Windows与Linux上的行结束标示符... 14 23.      输出0-255之间的ISO8859-1符... 14 24.      String的replace()与replaceAll() 15 25.      一段程序的三个Bug. 16 字符串 19. char类型相

【java解惑】java字符串替换方法使用

    如下代码: public class Example020 { public static void main(String[] args) { String separator = File.separator; String clazzName = Example020.class.getName(); String rs1 = clazzName.replace(".", separator); // 方法1 String rs2 = clazzName.replaceA

【java解惑】字符串的字节数组构造函数使用

如下代码: public class Example018 { public static void main(String[] args) { byte bs[] = new byte[256]; for (int i = 0; i < 256; i++) { bs[i] = (byte) i; } string(bs);// 调用1 string(bs, "iso-8859-1");// 调用2 string(bs, "gbk");// 调用3 strin

java解惑之字符之谜(谜题16)

谜题16:行打印程序 行分隔符是为分割文本行的字符或字符串而起的名字,并且在不同平台上它是存在差异的.在windows平台上,它由CR字符(回车)和紧随其后的LR(换行)字符组成.在UNIX平台上,通常引用单独的LF字符作为换行字符.那么,这次的谜题也就由行分隔符引出,来看看下面这个将LF字符传递给println方法的程序会打印什么,它的行为是否依赖于平台? public class LinePrinter{ public static void main(String[] args){ //N

java解惑之陷阱和缺陷的目录总结

A1 词汇问题 A 1.1 字母l在许多字体中都与数字1相像 规则:在long类型字面常量中,应该总是用大写L,千万不要用小写l.不要用孤零零的一个l作为变量名. 谜题4 A 1.2 负的十六进制字面常量看起来像正的 规则: 要避免混合类型的计算.在恰当的地方要用long类型的字面常量代替int类型的字面常量.谜题5 A 1.3 八进制字面常量与十进制字面常量相像 规则: 要避免八进制字面常量.如果非得使用它们,那么请对所有用到的地方进行注释,以使得你的意图清晰. 谜题59 A 1.4 ASCI