A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sun7day1988 中级黑马   /  2015-10-30 12:15  /  1177 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面的是一个合法的Java 程序吗?如果是,它会打印出什么呢?\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020\u0020\u0063\u006c\u0061\u0073\u0073\u0020\u0055\u0067\u006c\u0079\u007b\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0073\u0074\u0061\u0074\u0069\u0063\u0076\u006f\u0069\u0064\u0020\u006d\u0061\u0069\u006e\u0028\u0053\u0074\u0072\u0069\u006e\u0067\u005b\u005d\u0020\u0020\u0020\u0020\u0020\u0020\u0061\u0072\u0067\u0073\u0029\u007b\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0020\u0022\u0048\u0065\u006c\u006c\u006f\u0020\u0077\u0022\u002b\u0022\u006f\u0072\u006c\u0064\u0022\u0029\u003b\u007d\u007d这当然是一个合法的Java 程序!这不是很显而易见吗?它会打印Hello World。噢,可能是不那么明显。事实上,该程序根本让人无法理解。每当你没必要地使用了一个Unicode 转义字符时,都会使你的程序的可理解性更缺失一点,而该程序将这种做法发挥到了极致。如果你很好奇,可以看看下面给出的该程序在Unicode 转义字符都被转换为它们所表示的字符之后的样子:publicclass Ugly{publicstaticvoid main(String[]args){System.out.println(“Hello w”+“orld”);}}下面给出了将其进行格式化整理之后的样子:public class Ugly {public static void main(String[] args){System.out.println("Hello w"+"orld");}}这个谜题的教训是:仅仅是因为你可以不以应有的方式去进行表达。或者说,如果你这么做会造成损害,那么就请不要这么做!更严肃地讲,这个谜题是对前面三个教训的补充:Unicode 转义字符只有在你要向程序中插入用其他任何方式都无法表示的字符时才是必需的,除此之外的任何情况都不应该避免使用它们。Unicode 转义字符降低了程序的清晰度,并且增加了产生bug 的可能性。对语言的设计者来说,也许使用Unicode 转义字符来表示ASCII 字符应该被定义为是非法的。这样就可以使得在谜题14、15 和17(本谜题)中的程序非法,从而消除了大量的混乱。这个限制对程序员并不会造成任何困难。

评分

参与人数 2黑马币 +14 收起 理由
liusangsang + 5 这个还是应该多思考的,学习了!.
chuanzhibokepkh + 9 赞一个!

查看全部评分

5 个回复

倒序浏览
表示完全无厘头,,,
回复 使用道具 举报
这是以让人看不懂为目的写的代码吗?
回复 使用道具 举报
这个以前好像见过,感谢你分享!
回复 使用道具 举报
这个很棒,学习了!
回复 使用道具 举报
看不懂。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马