什么区别List <String> stringList = new ArrayList <String>()和List <String> stringList = new ArrayList()?

Smr*_*ita 4 java arraylist

我知道在java中可以进行以下两种声明和初始化.

List<String> stringList = new ArrayList<String>() 

List<String> stringList = new ArrayList()?
Run Code Online (Sandbox Code Playgroud)

但他们之间究竟有什么不同呢?

另外,您更喜欢命名列表变量?你喜欢将它们命名为variableList还是只是变量?或者你有其他方法吗?

Daw*_*ica 11

没有什么区别,虽然第二个会给你一个编译警告.

它们编译为相同的字节码,因为编译器会丢弃有关您使用的类型参数的信息.

问题是ArrayList该类是在泛型之前发明的,所以我们总是必须创建它new ArrayList(),而不指定类型参数.现在使用泛型,我们可以指定将存储在哪种类型的对象中,ArrayList并让编译器检查我们是否正确使用它.这样做的符号就是你在第一个例子中使用的符号.

但是,编译器随后进行的任何检查都是基于变量的类型,而不是您创建的类的类,因此差异将完全没有影响,超过初始编译器警告.

从Java 7开始,编写它的首选方法List<String> stringList = new ArrayList<>();是在早期版本的Java中不能使用这种表示法.