public class Test {
public static void append(List list){
list.add("asdf");
}
public static void main(String[] args) {
List<Integer> intList = new ArrayList<Integer>();
append(intList);
System.out.println(intList.get(0));
}
}
public class Test {
public static void append(List list){
list.add("asdf");
}
public static void main(String[] args) {
List<Integer> intList = new ArrayList<Integer>();
append(intList);
System.out.println(intList.get(0));
}
}
我们先来看看java编译器是怎么解析如下这句代码的。
[code="java"]intList.get(0).getClass();[/code]
java反汇编一下,生成如下对应的java汇编语言:
[img]http://dl.iteye.com/upload/picture/pic/58197/914360ca-cfd4-3348-a814-914c0c69ab90.jpg[/img]
从第14,我们可以看出get真正返回的类型是Object类型。
注意了,在第14的get方法之后第19是[color=red][size=medium]checkcast[/size][/color]语句,紧跟着后面的是转化为Integer类型。
好了,“String类型-->Object类型--->Integer类型”这个过程肯定报错。这下子明白了错误就出在这里。
回过头去看看前面。
然后我用同样的方法去看看这面这句为什么没错:
[code="java"]System.out.println(intList.get(0)); [/code]
从上面,我们知道get返回的数据类型是Object。
所以我写出如下代码:
[code="java"]Object i = intList.get(0);
i.getClass();[/code]
反汇编成java汇编语言:(见下面)
[img]http://dl.iteye.com/upload/picture/pic/58201/c586fb0a-e018-31b6-a214-da981d4a6073.jpg[/img]
至于它输出字符串“sdf” ,那是多态的机制。