我嘗試使用下面的方法來創建List實例:類型差異
List<String> listOne = new ArrayList<String>();
List<String> listTwo = new ArrayList<String>(){};
List<String> listThree = new ArrayList<String>() {{}};
只有listOne
作爲java.util.ArrayList
初始化,但listTwo
和listThree
都沒有。
在初始化listTwo和listThree時會發生什麼,以及如何更好地理解它?
我的測試示例如下:
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<String> listOne = new ArrayList<String>();
List<String> listTwo = new ArrayList<String>(){};
List<String> listThree = new ArrayList<String>() {{}};
System.out.printf("listOne.getClass() == listTwo.getClass() is %b \n",
listOne.getClass() == listTwo.getClass());
System.out.printf("listOne.getClass() == listThree.getClass() is %b \n",
listOne.getClass() == listThree.getClass());
System.out.printf("listThree.getClass() == listTwo.getClass() is %b \n",
listThree.getClass() == listTwo.getClass());
System.out.printf("listOne.getClass() is %s \n",listOne.getClass());
System.out.printf("listTwo.getClass() is %s \n",listTwo.getClass());
System.out.printf("listThree.getClass() is %s \n",listThree.getClass());
}
}
及其在控制檯輸出如下:
listOne.getClass() == listTwo.getClass() is false
listOne.getClass() == listThree.getClass() is false
listThree.getClass() == listTwo.getClass() is false
listOne.getClass() is class java.util.ArrayList
listTwo.getClass() is class Test$1
listThree.getClass() is class Test$2
嘗試閱讀這篇文章,你會找到答案: [1]:HTTP:// stackoverflow.com/questions/924285/efficiency-of-java-double-brace-initialization –