构造ArrayList时,new ArrayList<ClassName>()与new ArrayList<>()有何区别?
ArrayList两种实例化写法的区别
嘿,这个问题问得特别实用!其实这俩写法本质上功能完全一致,核心区别就是语法糖的引入和Java版本支持,具体给你掰扯清楚:
new ArrayList<String>():Java 7及之前的标准写法
在Java 7推出之前,Java编译器还不具备泛型类型自动推断的能力,所以你在实例化泛型类的时候,必须在new关键字后面重复一遍泛型类型(这里就是<String>),不然编译器会把它当成原始类型处理,要么给你警告,要么直接编译失败。new ArrayList<>():Java 7+的菱形运算符写法
Java 7引入了「菱形运算符(Diamond Operator)」这个语法糖,编译器可以根据左边变量的声明类型(也就是ArrayList<String>),自动推断出右边实例化时应该使用的泛型类型是String,这样就不用重复写<String>了,代码更简洁清爽。
举个你给出的例子来说:
ArrayList<String> x = new ArrayList<String>(); // Java 7及之前必须这么写 ArrayList<String> y = new ArrayList<>(); // Java 7+可以这么写,编译后和上面完全一样
额外补充
这两种写法编译生成的字节码是完全相同的,运行时没有任何差异。如果你的项目是基于Java 7或更高版本开发的,强烈推荐用菱形运算符,能减少冗余代码,提升可读性。但如果是维护Java 6及更早版本的老项目,就只能用第一种写法啦。
内容的提问来源于stack exchange,提问作者Dan L.
相关产品推荐
相关产品推荐

