gpt4 book ai didi

java - List arr 和 var arr 之间的区别

转载 作者:行者123 更新时间:2023-12-05 09:02:46 26 4
gpt4 key购买 nike

下面的代码工作正常。

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);

但是如果你把第一行改成

var arr = new ArrayList<Integer>();

会发生错误:

java: incompatible types: java.util.List<java.lang.Integer> cannot be converted to java.util.ArrayList<java.lang.Integer>

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

最佳答案

当你写作时

var arr = new ArrayList<Integer>();

编译器推断 arr 的类型变量为 ArrayList<Integer> , 所以它等价于写:

ArrayList<Integer> arr = new ArrayList<Integer>();

arr.subList(0,1)返回 List<Integer> ,不能分配给 ArrayList<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 的变量.

关于java - List<Integer> arr 和 var arr 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70912743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com