码迷,mamicode.com
首页 > 其他好文 > 详细

字符之谜

时间:2015-04-14 10:00:41      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:java解惑   字符之谜   

字符,从字面理解,就是一些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。

字符之谜

标签:java解惑   字符之谜   

原文地址:http://blog.csdn.net/havedream_one/article/details/45037033

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!