首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >List.of和Arrays.asList有什么区别?

List.of和Arrays.asList有什么区别?
EN

Stack Overflow用户
提问于 2017-10-05 14:22:33
回答 1查看 76.4K关注 0票数 199

Java9为列表引入了新的工厂方法,List.of

代码语言:javascript
复制
List<String> strings = List.of("first", "second");

以前的选项和新的选项有什么不同?也就是说,这两者之间有什么区别:

代码语言:javascript
复制
Arrays.asList(1, 2, 3);

还有这个:

代码语言:javascript
复制
List.of(1, 2, 3);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-05 14:41:03

List.of返回的列表为immutable时,Arrays.asList返回可变列表

代码语言:javascript
复制
List<Integer> list = Arrays.asList(1, 2, null);
list.set(1, 10); // OK

List<Integer> list = List.of(1, 2, 3);
list.set(1, 10); // Fails with UnsupportedOperationException

Arrays.asList允许空元素,而List.of不允许:

代码语言:javascript
复制
List<Integer> list = Arrays.asList(1, 2, null); // OK
List<Integer> list = List.of(1, 2, null); // Fails with NullPointerException

对于空值,contains的行为有所不同:

代码语言:javascript
复制
List<Integer> list = Arrays.asList(1, 2, 3);
list.contains(null); // Returns false

List<Integer> list = List.of(1, 2, 3);
list.contains(null); // Fails with NullPointerException

Arrays.asList返回传递的数组的视图,因此对数组的更改也将反映在列表中。对于List.of,这不是真的:

代码语言:javascript
复制
Integer[] array = {1,2,3};
List<Integer> list = Arrays.asList(array);
array[1] = 10;
System.out.println(list); // Prints [1, 10, 3]

Integer[] array = {1,2,3};
List<Integer> list = List.of(array);
array[1] = 10;
System.out.println(list); // Prints [1, 2, 3]
票数 302
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46579074

复制
相关文章

相似问题

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