List l = new ArrayList<Number>(); 的静态类型是 List<Number>?这意味着什么?

5
List l = new ArrayList<Number>();

l的静态类型是List吗?这里的“静态类型”是什么意思?我在sun的java教程中读到了它。

1个回答

6

表达式的“静态类型”是编译器所认为的类型 - 编译时类型。这可能与变量的值的执行时类型不同。

例如,考虑以下代码:

Object obj = "hello";

编译时类型(或静态类型)的obj变量是java.lang.Object。然而,在执行时,obj的值是指向java.lang.String类型对象的引用。


这里的'l'的静态类型是什么,为什么会这样? - Rekha
@Rekha:l 的静态类型是原始类型 List,因为变量是这样声明的。对于变量,静态类型很简单 - 它只是变量声明的类型。其他表达式也有静态类型 - 例如,方法调用的静态类型是该方法的返回类型。 - Jon Skeet
l.add(0, new Integer(42)); add方法的第二个形式参数的静态类型是String。但是为什么?它不应该是Object吗? - Rekha
@Rekha:是的,第二个形式参数的静态类型确实是Object - 但只有当您使用原始类型变量l时才是。您确定自己没有想到另一个问题中的ls,它是一个List<String>吗? - Jon Skeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接