對C++一知半截,對Java也是,但是希望通過不斷的學習不斷的對比,對這兩個語言都有深入的了解:
1、例如Java中的final變量,變量值是一個Object(或者是一個數組),然而這個Object的方法可以修改此Object中的instance variable(或者數組中的值改變),讀到這里我想到:C++中的常量指針不也是如此嗎?常量指針指向的變量不可以改變,但是常量指針指向的變量的地址所存的值是可以改變的。
2、(等到再發現的時候再添上吧,如果有哪位仁兄愿意,希望能夠出出力,添上些,咱們一同進步!)
http://www.infoq.com/cn/articles/cf-java-generics
讀這篇文章最深的印象是:Java泛型擦除是在編譯時刻進行的,所以JVM看到的只是List,而不會看到List<String>之類,并且有List.Class而沒有List<String>.Class。想要知道更多東西,請看這篇文章。
最近看Java Language specification,看到第四章,感覺有很多東西自己以前都不曾注意,所以建議學Java的同學都看看,真的是查漏補缺。
下面說說Raw Type:
public TClass<E>{
public List<String> getString(){
return null;
}
public static void main(String args[]){
TClass tc = TClass();
List<TClass> list = tc.getString(); //1
}
}
1處就很奇怪了,為什么getString命名返回的是List<String>而將其賦值給List<TClass>類型都可以呢?這就是編譯器對Raw type進行了處理,編譯器將Raw type進行擦除,就是將其參數類型中的參數全部去掉,例如List<String>將擦除成List,所以tc.getString()返回的是List而不是List<String>。