2013-07-11 215 views
4

以下两个语句在初始化ArrayList时有什么区别?初始化集合

ArrayList<String> a = new ArrayList<String>(); 
ArrayList<String> a = new ArrayList<>(); 
+0

好。第一个是允许在Java 6中,而第二个是允许在Java 7中,我也很想知道它的详细原因 –

+1

@PrasadKharkar你的意思是“_second one_不允许在Java 6中”,对吧? – fge

+0

@fge耶在评论时犯了愚蠢的错误。我的意思是。 Java 6不允许第二个版本和Java 7允许它。 –

回答

13

的Java 1.7之前,仅这一项是允许的:

ArrayList<String> a = new ArrayList<String>(); 

而在1.7,这是增加,这是相同的,但更短:(所有的程序员都很懒)

ArrayList<String> a = new ArrayList<>(); 
+5

+1为“所有程序员都懒”。最好的例子是自我解释变量'a' ;-) –

+1

@Chasmo +1也为你评论.. –

+0

实际上被称为“Java 7中的钻石算子”。 – axcdnt

4

后者使用了Java 7的语法(被称为钻石运营商)推出的推断类型的Java 1.7,因此前者用于那些早期版本之前是集合非法的。

钻石操作员减少了声明的冗长度。

3

没有区别。第二种选择(称为钻石操作员)是一种捷径。编译器会推断通用ArrayList的类型参数必须是String。

0

第二种选择是使用在java 7推出的类型中引入的概念。除此之外,假设你使用的是java 7,这两个调用的效果应该是相同的。在较早的java版本中,您不能使用第二版的代码。