來(lái)個(gè)兩個(gè)有趣的例子:
1。URL的愚弄,難道SUN對(duì)google的待遇很特殊??
public class BrowserTest {
    public static void main(String[] args) {
        System.out.print("iexplore:");
        http://www.google.com;
        System.out.println(":maximize"); 
    }
}
上面這個(gè)例子能運(yùn)行嗎?你確定嗎?是的,我確定,這個(gè)例子可以完全正常地運(yùn)行。為什么?這個(gè)例子等價(jià)于:
public class BrowserTest {
    public static void main(String[] args) {
        System.out.print("iexplore:");
        http:
        //www.google.com;
        System.out.println(":maximize"); 
    }
}
哈哈,http只是作為標(biāo)簽(label),因?yàn)镴AVA沒(méi)有g(shù)oto語(yǔ)句,它是通過(guò)label和continue語(yǔ)句來(lái)模擬的。而//www.google.com;只是注釋。我第一次看見(jiàn)這個(gè)例子的時(shí)候也被搞混了。
2。完全用UNICODE表示的程序:請(qǐng)把下面這段“代碼”放進(jìn)一個(gè)Ugly.java的文件中,編譯運(yùn)行即可,輸出老掉牙的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
哈哈,是好玩,可苦了看程序的人,所以盡量避免使用轉(zhuǎn)義符吧。
3??纯聪旅孢@個(gè)例子,打印什么?
public class LastLaugh {
    public static void main(String args[]) {
        System.out.print("H" + "a");
        System.out.print(‘H‘ + ‘a(chǎn)‘);
    }
}
哈?下半聲我笑不出來(lái)了,打印出來(lái)的是Ha169。道理很簡(jiǎn)單,+號(hào)只對(duì)String 類型做了重載,而char類型沒(méi)有,所以第2個(gè)輸出語(yǔ)句其實(shí)是把char轉(zhuǎn)為int,再進(jìn)行+操作,即72+97。解決此問(wèn)題可以在前面加個(gè)空字符串:
    System.out.print(""+‘H‘ + ‘a(chǎn)‘);
或者JDK5中使用printf,System.out.printf("%c%c",‘H‘,‘a(chǎn)‘);
 
4。字符串奶酪:
public class StringCheese {
    public static void main(String args[]) {
        byte bytes[] = new byte[256];    
        for(int i = 0; i < 256; i++)
            bytes[i] = (byte)i;
        String str = new String(bytes);
        for(int i = 0, n = str.length(); i < n; i++)
            System.out.print((int)str.charAt(i) + " ");
    }
}
你可能以為會(huì)打印從0到255,可惜結(jié)果卻不一定,這依賴于你的平臺(tái)的缺省字符集。我的機(jī)器上默認(rèn)是GBK,這個(gè)程序只有在字符集是ISO-8859-1時(shí)才可以,所以可以改成:
String str = new String(bytes,"ISO-8859-1");
平臺(tái)的默認(rèn)字符串在JDK5中使用java.nio.charset.Charset.defaultCharset()來(lái)查詢。
 
5。另一個(gè)需要注意的是String的replaceAll的方法第一個(gè)參數(shù)是正則表達(dá)式,而不是常量字符串。你可以使用String的replace方法來(lái)替代。
 
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=704572