有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
查看: 272|回复: 2
收起左侧

JAVA/Android中关于集合对象的清空、赋值的小tip(个人心得)

[复制链接]

签到天数: 62 天

连续签到: 1 天

[LV.6]常住居民II

181

主题

18

好友

6万

积分

第三章

流光一瞬,离愁一身。

积分
68492
发表于 2016-8-24 13:27:01 | 显示全部楼层 |阅读模式

╱人◕‿‿◕人╲定下契约

您需要 登录 才可以下载或查看,没有账号?╱人◕‿‿◕人╲订下契约(注册新用户)

x
本帖最后由 wugy315 于 2016-8-24 13:43 编辑

写一个Android项目时遇到的问题。
在当前Activity类中声明了一个packageName集合【List<String> packageName = null;】,
而后在onCreat方法中调用该集合对象进行重新赋值【packageName = new ArrayList<String>()】。
同时,在onCreat中设置button监听,当某个button按下后,对当前集合对象添加元素。



而后,在另一个方法中,当packageName集合判断不为空时,执行相关操作并清空该集合对象中的元素。
此处,我清空集合使用的是packageName = null语句,给packageName赋值为空。
这样做乍一看是没有问题的。然而实际上,此时的packageName已经不是之前的ArrayList对象了,而是空对象(null)。
因此。当我再次点击Button时,会报nullPointerException。空指针异常。为什么呢?因为当前对象已经改变了,无法进行元素添加。


所以,当清空集合对象中的元素时,正确的做法是调用clear方法,即packageName.clear()。
只有这样做,才能使得对象不产生变化,当下一次点击button时,还能正常添加元素。

以上。
2016.08.24
-----------------------------
补充:当packageName = new ArrayList<String>()时,即便集合中无元素,packageName != null。
昔年种柳,依依汉南。
回复

使用道具 举报

签到天数: 27 天

连续签到: 1 天

[LV.4]偶尔看看III

2

主题

8

好友

9056

积分

序章

积分
9056
发表于 2016-8-24 14:47:12 | 显示全部楼层
会编程,好厉害的感觉
话说如果新建定义一个值,赋予空值,那是之后就给它运算之类,还是处于空值吗?而且报错吗
其实我完全不会,没接触过Android,只是知道一点点as的
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 62 天

连续签到: 1 天

[LV.6]常住居民II

181

主题

18

好友

6万

积分

第三章

流光一瞬,离愁一身。

积分
68492
 楼主| 发表于 2016-8-24 15:30:03 | 显示全部楼层
九命怪猫 发表于 2016-8-24 14:47
会编程,好厉害的感觉
话说如果新建定义一个值,赋予空值,那是之后就给它运算之类,还是处于空值吗? ...

如果你的意思是声明一个对象然后给它赋值为空的话。那它就是空值,会报空指针异常。不过这个报错的前提是你的运算中有需要用到这个集合中的元素(这要求集合不能为空)
昔年种柳,依依汉南。
回复 支持 反对

使用道具 举报

本版积分规则

小黑屋|手机版|技术宅(基宅) ( 粤ICP备18082987号-1 | 浙公网安备 33010902001746号 )

GMT+8, 2024-3-29 20:28 , Processed in 0.133408 second(s), 13 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表