对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>。