java addall 不能传null_使用List的addAll()方法请判空指针
在写代码的时候经常会用到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()方法请判空指针相关推荐
- 转 java c++互传arraylist
Java JNI由浅入深(包括:Java和C++互传ArrayList泛型对象参数) 2010-11-25 09:57 1694人阅读 评论(1) 收藏 举报 我们知道Java是一个运行在虚拟机里面的 ...
- java fileupload 进度_Java上传文件进度条的实现方法(附demo源码下载)
本文实例讲述了Java上传文件进度条的实现方法.分享给大家供大家参考,具体如下: 东西很简单,主要用到commons-fileupload,其中有一个progressListener的接口,该接口可以 ...
- java flex 上传文件_使用Flex和java servlet上传文件
资源都是来自网上.本实例将展示使用Flex和java servlet上传文件. 事前准备就是到http://commons.apache.org 下载common-fileupload-1.1.1.j ...
- java图片上传下载_java web 文件上传与下载
组件工作流程:WEB服务器request ServletFil eupLoad DiskFileItem Factory代表普通字段的FileItem代表上传文件1FileItem代表上传文件2Fil ...
- Java传值与传引用
基本参数类型:传值 对象类型:传引用 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实 ...
- java怎么上传文件到web服务器_Java客户端通过Http发送POST请求上传文件到web服务器...
http://www.cnblogs.com/WilliamJiang/archive/2012/04/29/2475883.html 1.朋友的一个需求,让我给他实现,需求是这样的,需要用ASP.n ...
- java保存图片进度条_Java上传文件进度条的实现方法(附demo源码下载)
本文实例讲述了Java上传文件进度条的实现方法.分享给大家供大家参考,具体如下: 东西很简单,主要用到commons-fileupload,其中有一个progressListener的接口,该接口可以 ...
- java spring mvc 上传_Java Spring MVC 上传下载文件配置及controller方法详解
下载: 1.在spring-mvc中配置(用于100M以下的文件下载) 下载文件代码 @RequestMapping("/file/{name.rp}") public Respo ...
- java ee 上传文件_17.《JavaEE 学习笔记》Servlet 上传文件
功能介绍: 利用 Servlet 和表单提交,选择本地文件上传到服务器.上传的文件可以是文本文件或图像文件或任何文档,不能是文件夹. 需要引入的 jar 文件:commons-fileupload-1 ...
最新文章
- SAP 没有激活HUM功能照常可以使用Handling Unit
- 谁在关心toString的性能?
- Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 3 ----数据访问层
- promise的状态值_什么是Promise,Promise的三种状态
- 文件管理服务器数据库,Oracle数据库服务器参数文件管理教程
- 跟着川川学数模-Day2
- Java并发编程之线程池中的Future
- 【Flink】flink keyby 在 subtask 中分配不均的研究
- JAVA redis 常用函数
- eclipse 下编写java code 比较好的设置和快捷键
- python视频大全
- dll缺失怎么修复?有什么好的修复方法推荐?
- 第3章第11节:如何将众多图片制作成照片墙并作为幻灯片的背景 [PowerPoint精美幻灯片实战教程]
- Windows中的键盘快捷方式大全
- 微信小程序注册/登陆页面及后台接口开发实战(一)
- 【C++】std::numeric_limits 类型对应最值查询
- Python-在线网页导出为图片或pdf
- 九轴传感器MPU9250数据读取磁力计
- 关于amdCPU+华硕主板B450主板和海盗船内存条运行Windows10系统蓝屏问题
- MyBatis-Plus之简介、快速入门、insert、update
热门文章
- 【Obsidian\Typora\坚果云\阿里云OSS】零基础搭建自己的知识库,或者叫避坑指南
- 『Android春招实习攻略』2022年中总结
- 【Python机器学习】——百分位数
- 华天动力OA系统的一“技”之长
- ffmpeg api实现将音视频混合
- 浅谈药企如何选择药品流向系统
- java计算机毕业设计中学网站设计与实现演示录像2020源码+mysql数据库+系统+部署+lw文档
- JS 链判断运算符(?.)
- 安装ubuntu成功后不能重启(nomodeset)躺坑记录acpi int3400:00:Unsupported event
- 差了这一块,项目经理真的很难进大厂