谁能解释一下 ArrayList
类的这两个实例有什么不同?
List<Integer> intList = new ArrayList();
List<Integer> intList = new ArrayList<Integer>();
我知道编译器在将其编译为字节码时会删除类型变量,即 Integer
,并且上面的示例都完全相同。我想知道在右侧传递类型变量 (Integer
) 是否有任何好处,因为它已经在左侧声明了?据我在网上找到的,他们都使用后一种,但我看不出有任何理由我应该在双方声明两次。
最佳答案
它们是两个不同的东西。左侧是变量的类型。右侧是您正在创建的对象的类型。编译器将首先使用您在右侧提供的类型创建对象,然后将引用分配给您左侧的变量。
在您的情况下,没有区别,因为 ArrayList 在所有情况下都具有相同的构造函数。然而:
- 在其他类中,构造函数的行为可能会根据您提供的特定类型而有所不同。
- 如果您匹配类型,您将使编译器更容易。在第一个版本中,编译器必须分配一个类型为
ArrayList
的对象。到一个需要List<Integer>
的变量类型。在某些情况下,您可能会收到警告,因为类型不明显匹配。
关于java - 实例化泛型类时传递类型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4415319/