在 Linux 下用 jdk 1.6 寫了個程序,編譯打包後,一切正常,拿到 win 下,同樣是 1.6 的jdk,居然說什麼不兼容的編譯類型,非法的 magic number.
只好在 Linux 下用 jdk 1.4.2 這個經典的版本重新編譯一下,結果就發現了下面兩個不同:1. 在 1.4.2 中, assert 是 keyword ,不可以 assert (boolean expression):(String) 這樣來用,而在 1.6 中是可以的。
在 1.4.2 下編譯時,會給出warning: as of release 1.4, assert is a keyword, and may not be used as an identifier,並且會報錯,說是分號的錯誤(其實是編譯器把 assert 當作 identifier 來處理報的錯)。
2. 在 1.4.2 中,不可以如下這樣來 override clone() 方法
public NewClass clone(){
...
return NewClass;
}
這在 1.6 中是允許的,也是方便的。
在 1.4.2 中只能
public Object clone(){
...
return ...;
}
於是就有了 N 多的強制類型轉換。