锁定老帖子 主题:不小心犯的一个空指针错误
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-06-18
今天碰到了一个空指针异常,代码看起来很普通,一点也看不出会空指针,后来debug才发现了问题所在。这是很容易忽略的地方,记一笔,不知道大家有没有碰到过。 下面代码是根据这个问题写的。 import java.util.ArrayList; public class Model{ static ArrayList<String> list; static void read(ArrayList<String> list) { if(list == null) { list = new ArrayList<String>(); } list.add("Hello"); } public static void main(String[] args) { Model.read(list); System.out.println(list.size()); } } 会输出什么呢?
大家可以先猜一猜。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-06-18
呃。。 题目都已经写了空指针了,郁闷,本来还想卖个关子的。
通常给用这样的方法修改对象里面的属性,而这里的list只是一个引用变量,没有指向任何的对象,所以方法里面的list是一个副本,new出来的对象也跟原list没关系。 |
|
返回顶楼 | |
发表时间:2010-06-19
建议你换个IDE吧,用idea,它就提示你有问题了
|
|
返回顶楼 | |
发表时间:2010-06-19
chroya 写道 呃。。 题目都已经写了空指针了,郁闷,本来还想卖个关子的。
通常给用这样的方法修改对象里面的属性,而这里的list只是一个引用变量,没有指向任何的对象,所以方法里面的list是一个副本,new出来的对象也跟原list没关系。 深刻理解一下,java里面没有地址传递,所有的方法调用,无论参数是简单数据类型还是对象,都是值传递,就不会有疑问了。 |
|
返回顶楼 | |
发表时间:2010-06-19
对的,都是值传递 ,记得这个就行了。
|
|
返回顶楼 | |
发表时间:2010-06-19
wumingshi 写道 建议你换个IDE吧,用idea,它就提示你有问题了
是啊,这样的问题Eclipse肯定会提示不同的颜色。除非看花眼。。。 |
|
返回顶楼 | |
发表时间:2010-06-19
”建议你换个IDE吧它就提示你有问题了“ 没明白啊 在Eclipse里肯定木错啊 符合java语法啊 不知道 上面指的是嘛意思
这是java基础问题 也算常见 其实 你传进方法里 new的 和你传一去的不是一个对象哦 ,其实就再上面说的 java就是值传递 |
|
返回顶楼 | |
发表时间:2010-06-19
楼主写出这样的代码不是自找苦吃吗
|
|
返回顶楼 | |
发表时间:2010-06-19
你就相当于:
Model.read(null); |
|
返回顶楼 | |
发表时间:2010-06-19
最后修改:2010-06-19
if(list == null) { list = new ArrayList<String>(); } 应该是这个地方有问题。 |
|
返回顶楼 | |