《Java解惑》系列——02字符谜题——谜题17:嗯??

知识点:

在程序中,最后禁止使用Unicode转义字符表示ANSII字符。


问题:

牛B的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

// 期望结果:我不相信你能看懂
// 实际结果:还有意义吗??

// 代码的翻译

public  
class Ugly 
{public 
static 
void 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转义字符表示ANSII字符了,否则,后果很严重。


总结:

对语言的设计者来说,也许使用Unicode 转义字符来表示ASCII字符应该被定义
为是非法的。这样就可以使得在谜题 14、15和 17(本谜题)中的程序非法,从
而消除了大量的混乱。这个限制对程序员并不会造成任何困难。 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值