从ArrayList 这里的源代码可以看出,实现的大部分方法都是注释的,@override因为所有这些方法都是通过List接口定义的,如果你只使用基本功能(那就是你大部分时间都要做的)差异不会是任何实际的差异。如果有一天你会认为它的特征ArrayList不再适用于你的问题并且你需要不同的东西(LinkedList例如),那么差异就会到来。如果您将所有内容声明为List实例化,ArrayList则可以通过更改实例化来轻松切换到新实现,new ArrayList()而在其他情况下,您还必须更改所有变量声明。使用List list = new ArrayList()更多OOP样式,因为您声明您不关心列表的特定实现,并且您想要丢弃有关该类型的静态信息,因为您将依赖于此类集合提供的接口从其中抽象出来实现。