【问题标题】:What is the difference between "ArrayList<String> = new ArrayList<>()" and "ArrayList<String> = new ArrayList<String>()"? [duplicate]“ArrayList<String> = new ArrayList<>()”和“ArrayList<String> = new ArrayList<String>()”有什么区别? [复制]
【发布时间】:2015-12-07 13:04:18
【问题描述】:

正如标题所说,在Java中,这两个语句有什么区别吗?

通常我可以同时看到这两个语句。所以我想可能没有区别。但是你能帮助确认和解释为什么它们是相同的吗?

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

谢谢!

【问题讨论】:

  • 它们只是两种书写方式相同。
  • 大家好,非常感谢大家的回答!!只需将第一个标记为可接受的答案,但我认为您的所有答案都是清晰和正确的。

标签: java


【解决方案1】:

它们是相同的。 new ArrayList&lt;String&gt;(); 在 JDK 7 之前是必需的。在 JDK 7 中,他们引入了“菱形运算符”,其中类型是推断出来的。

所以,如果您使用的是 JDK 7+,您可以简单地使用 new Arraylist&lt;&gt;()

您可以在 Class Instance Creation Expressions 下的 Java Language Specification 中看到这一点,或搜索“Diamond Operator”

【讨论】:

    【解决方案2】:

    这是钻石操作员。

    菱形运算符通过让编译器推断泛型类的构造函数的参数类型,减少了 Java 对泛型的一些冗长。

    http://www.javaworld.com/article/2074080/core-java/jdk-7--the-diamond-operator.html

    【讨论】:

      【解决方案3】:

      在 java 7 和更高版本中没有区别。后者被认为更简洁。
      所谓的菱形运算符&lt;&gt; 在这里帮助推断类型。

      【讨论】:

        猜你喜欢
        • 2014-07-22
        • 2017-05-08
        • 1970-01-01
        • 2013-12-20
        • 2013-03-27
        • 1970-01-01
        • 1970-01-01
        • 2014-01-09
        • 1970-01-01
        相关资源
        最近更新 更多