字符之谜

来源:互联网 发布:2017淘宝类目宝贝数量 编辑:程序博客网 时间:2024/05/17 05:51

字符,从字面理解,就是一些char型的东东,然而放到程序里,就引申出了多种解读方式

1、转义字符

在程序中,转义字符何时被编译器解读呢?它的解读时刻可以理解成在编译之前,编译器先进行转义字符的替换。

比如下面的程序段:

(a)//\u0022是"

       System.out.println("a\u0022.length()+\u0022b".length);

打印2

(b)有一行注释是:/*from F:/a/b/c/unit*/

这是合法的吗?注意编译器查找到\u会认为后面接的是unicode码,而注释之后没有跟四位数字,那么编译器会拒绝编译

万变不离其宗,阅读程序时,注意到转义的Unicode码,然后将其转换再编译。

提示:不要随便使用Unicode的转义字符,除非迫不得已

2、正则表达式的特殊字符

这是关于正则表达式的理解.

string.replaceAll支持正则表达式,因此在使用这个函数时要主要到。

如:已有一个类com.javapluzzlers.Me

Me.class.getName().replaceAll(".","/")+".class";

替换后会是com/javapluzzlers/Me.class吗?

运行后发现不是。因为“.”在正则里表示匹配任意的字符,替换后会是一串/////////////.class,

3、URL

由于java支持标签,那么如果再程序段存在一条http://blog.csdn.net这样的语句,那么这个程序段会被编译吗?答案是会的。

因为http:被理解为标签,而//blog.csdn.net被理解为注释,显然不存在任何语法错误。

4、参数字符

考察下StringBuffer。

StringBuffer sf = new StringBuffer('M');

sf.add("a");

System.out.println(sf);

打印什么?会是Ma吗。

查看API会发现,StringBuffer并不存在参数为char的构造函数,但是存在参数为int 的构造函数,因此声明语句实际是声明了一个容量是’M‘(77)大小的buffer。

0 0
原创粉丝点击