现在的位置: 首页 > 综合 > 正文

Java Puzzlers(2)字符串之谜

2013年09月30日 ⁄ 综合 ⁄ 共 1828字 ⁄ 字号 评论关闭
来个两个有趣的例子:

1。URL的愚弄,难道SUN对google的待遇很特殊??

public class BrowserTest {
public static void main(String[] args) {
System.out.print("iexplore:");

http://www.google.com;

System.out.println(":maximize");
}
}

上面这个例子能运行吗?你确定吗?是的,我确定,这个例子可以完全正常地运行。为什么?这个例子等价于:

public class BrowserTest {
public static void main(String[] args) {
System.out.print("iexplore:");
http:

//www.google.com;
System.out.println(":maximize");
}
}

哈哈,http只是作为标签(label),因为JAVA没有goto语句,它是通过label和continue语句来模拟的。而//www.google.com;只是注释。我第一次看见这个例子的时候也被搞混了。

2。完全用UNICODE表示的程序:请把下面这段“代码”放进一个Ugly.java的文件中,编译运行即可,输出老掉牙的Hello World。

/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

哈哈,是好玩,可苦了看程序的人,所以尽量避免使用转义符吧。

3。看看下面这个例子,打印什么?

public class LastLaugh {
public static void main(String args[]) {
System.out.print("H" + "a");
System.out.print('H' + 'a');
}
}
哈?下半声我笑不出来了,打印出来的是Ha169。道理很简单,+号只对String 类型做了重载,而char类型没有,所以第2个输出语句其实是把char转为int,再进行+操作,即72+97。解决此问题可以在前面加个空字符串:

System.out.print(""+'H' + 'a');

或者JDK5中使用printf,System.out.printf("%c%c",'H','a');

4。字符串奶酪:

public class StringCheese {
public static void main(String args[]) {
byte bytes[] = new byte[256];
for(int i = 0; i






更多


抱歉!评论已关闭.