首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >List<Integer> arr与var arr的差异

List<Integer> arr与var arr的差异
EN

Stack Overflow用户
提问于 2022-01-30 07:35:07
回答 1查看 111关注 0票数 2

下面的代码工作正常。

代码语言:javascript
复制
List<Integer> arr = new ArrayList<Integer>();
System.out.println(arr.getClass().getSimpleName()); // output: ArrayList
arr.add(0);
arr.add(1);
arr = arr.subList(0,1);

但是如果您将第一行更改为

代码语言:javascript
复制
var arr = new ArrayList<Integer>();

将发生以下错误:

java:不兼容类型: java.util.List不能转换为java.util.ArrayList

然而,即使arr是用第二种方式定义的,它的类型仍然是ArrayList,那么有什么区别呢?

EN

回答 1

Stack Overflow用户

发布于 2022-01-30 07:40:26

当你写

代码语言:javascript
复制
var arr = new ArrayList<Integer>();

编译器推断arr变量的类型为ArrayList<Integer>,因此它相当于写入:

代码语言:javascript
复制
ArrayList<Integer> arr = new ArrayList<Integer>();

arr.subList(0,1)返回不能分配给ArrayList<Integer>List<Integer>,因为ArrayList<Integer>List<Integer>的实现,但并不是List<Integer>的所有实现都是ArrayList<Integer>

另一方面,当您将变量声明为List<Integer> arr时,可以为它分配List<Integer>的任何实现,其中包括arr.subList(0,1)返回的值。

需要注意的是,subList而不是返回ArrayList。例如,subList()方法ArrayList返回一个名为ArrayList$SubList的内部类的实例。这样的List不能分配给类型为ArrayList的变量。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70912743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档