在写代码的时候经常会用到List,Set的addAll()方法,但是要注意addAll()方法不能传入空指针。

1 packagelink.mengya.utils;2

3 importlink.mengya.User;4

5 import java.util.*;6

7 /**

8 * Created by chang on 16/2/20.9 */

10 public classListTest {11 public static voidmain(String[] args){12 User user = null;13 List users = null;14 List newUsers = new ArrayList();15 newUsers.add(user);16 newUsers.addAll(users);17 }18 }

如上,newUsers是一个List集合,在调用addAll()方法时传入users,此时users为null,这样会抛出NPE.

Exception in thread "main" java.lang.NullPointerException

at java.util.ArrayList.addAll(ArrayList.java:559)

at link.mengya.utils.ListTest.main(ListTest.java:16)

NPE 发生在ArrayList.java中第559行,在ListTest.java的第16行抛出NullPointerException,第15行调用add()方法也传入的是null,但没有抛错。

这是为什么呢呢呢???看源码。

ArraryList类的add()方法中并未用传入参数user来进行方法调用。

public booleanadd(E e) {

ensureCapacityInternal(size+ 1); //Increments modCount!!

elementData[size++] =e;return true;

}

再看ArraryList类的addAll()方法

public boolean addAll(Collection extends E>c) {

Object[] a=c.toArray(); //ArrayList.java:559

intnumNew =a.length;

ensureCapacityInternal(size+ numNew);//Increments modCount System.arraycopy(a, 0, elementData, size, numNew);

size+=numNew;return numNew != 0; }

传入的参数c是null,在执行c.toArray()时出现运行错误。

在使用这些常用集合的addAll()方法时,应对传入的参数check null

packagelink.mengya.utils;importcom.google.common.collect.Iterables;importcom.google.common.collect.Lists;importlink.mengya.User;import java.util.*;/*** Created by chang on 16/2/20.*/

public classListTest {public static voidmain(String[] args){

List users1 = null;

List users2 = new ArrayList();

users2.add(new User("chang", 24));

List users =Lists.newArrayList(Iterables.concat(getUsers(users1),getUsers(users2)));

}private static List getUsers(Listusers) {

List newUsers = new ArrayList();if(users != null){

newUsers.addAll(users);

}returnnewUsers;

}

}

扩展:

1.  List的常用实现类ArraryList  LinkedList的addAll方法都不能传入空指针。

2.  HashSet的addAll()方法继承自抽象类AbstractCollection,AbstractCollection的addAll的方法都不能传入空指针。

3.  TreeSet的addAll的方法都不能传入空指针。

java addall 不能传null_使用List的addAll()方法请判空指针相关推荐

  1. 转 java c++互传arraylist

    Java JNI由浅入深(包括:Java和C++互传ArrayList泛型对象参数) 2010-11-25 09:57 1694人阅读 评论(1) 收藏 举报 我们知道Java是一个运行在虚拟机里面的 ...

  2. java fileupload 进度_Java上传文件进度条的实现方法(附demo源码下载)

    本文实例讲述了Java上传文件进度条的实现方法.分享给大家供大家参考,具体如下: 东西很简单,主要用到commons-fileupload,其中有一个progressListener的接口,该接口可以 ...

  3. java flex 上传文件_使用Flex和java servlet上传文件

    资源都是来自网上.本实例将展示使用Flex和java servlet上传文件. 事前准备就是到http://commons.apache.org 下载common-fileupload-1.1.1.j ...

  4. java图片上传下载_java web 文件上传与下载

    组件工作流程:WEB服务器request ServletFil eupLoad DiskFileItem Factory代表普通字段的FileItem代表上传文件1FileItem代表上传文件2Fil ...

  5. Java传值与传引用

    基本参数类型:传值 对象类型:传引用 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实 ...

  6. java怎么上传文件到web服务器_Java客户端通过Http发送POST请求上传文件到web服务器...

    http://www.cnblogs.com/WilliamJiang/archive/2012/04/29/2475883.html 1.朋友的一个需求,让我给他实现,需求是这样的,需要用ASP.n ...

  7. java保存图片进度条_Java上传文件进度条的实现方法(附demo源码下载)

    本文实例讲述了Java上传文件进度条的实现方法.分享给大家供大家参考,具体如下: 东西很简单,主要用到commons-fileupload,其中有一个progressListener的接口,该接口可以 ...

  8. java spring mvc 上传_Java Spring MVC 上传下载文件配置及controller方法详解

    下载: 1.在spring-mvc中配置(用于100M以下的文件下载) 下载文件代码 @RequestMapping("/file/{name.rp}") public Respo ...

  9. java ee 上传文件_17.《JavaEE 学习笔记》Servlet 上传文件

    功能介绍: 利用 Servlet 和表单提交,选择本地文件上传到服务器.上传的文件可以是文本文件或图像文件或任何文档,不能是文件夹. 需要引入的 jar 文件:commons-fileupload-1 ...

最新文章

  1. SAP 没有激活HUM功能照常可以使用Handling Unit
  2. 谁在关心toString的性能?
  3. Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 3 ----数据访问层
  4. promise的状态值_什么是Promise,Promise的三种状态
  5. 文件管理服务器数据库,Oracle数据库服务器参数文件管理教程
  6. 跟着川川学数模-Day2
  7. Java并发编程之线程池中的Future
  8. 【Flink】flink keyby 在 subtask 中分配不均的研究
  9. JAVA redis 常用函数
  10. eclipse 下编写java code 比较好的设置和快捷键
  11. python视频大全
  12. dll缺失怎么修复?有什么好的修复方法推荐?
  13. 第3章第11节:如何将众多图片制作成照片墙并作为幻灯片的背景 [PowerPoint精美幻灯片实战教程]
  14. Windows中的键盘快捷方式大全
  15. 微信小程序注册/登陆页面及后台接口开发实战(一)
  16. 【C++】std::numeric_limits 类型对应最值查询
  17. Python-在线网页导出为图片或pdf
  18. 九轴传感器MPU9250数据读取磁力计
  19. 关于amdCPU+华硕主板B450主板和海盗船内存条运行Windows10系统蓝屏问题
  20. MyBatis-Plus之简介、快速入门、insert、update

热门文章

  1. 【Obsidian\Typora\坚果云\阿里云OSS】零基础搭建自己的知识库,或者叫避坑指南
  2. 『Android春招实习攻略』2022年中总结
  3. 【Python机器学习】——百分位数
  4. 华天动力OA系统的一“技”之长
  5. ffmpeg api实现将音视频混合
  6. 浅谈药企如何选择药品流向系统
  7. java计算机毕业设计中学网站设计与实现演示录像2020源码+mysql数据库+系统+部署+lw文档
  8. JS 链判断运算符(?.)
  9. 安装ubuntu成功后不能重启(nomodeset)躺坑记录acpi int3400:00:Unsupported event
  10. 差了这一块,项目经理真的很难进大厂