论坛首页 入门技术论坛

不小心犯的一个空指针错误

浏览 7691 次
该帖已经被评为新手帖
作者 正文
   发表时间: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());
	}
}

 会输出什么呢?

 

 大家可以先猜一猜。

   发表时间:2010-06-18  
呃。。  题目都已经写了空指针了,郁闷,本来还想卖个关子的。
通常给用这样的方法修改对象里面的属性,而这里的list只是一个引用变量,没有指向任何的对象,所以方法里面的list是一个副本,new出来的对象也跟原list没关系。
0 请登录后投票
   发表时间:2010-06-19  
建议你换个IDE吧,用idea,它就提示你有问题了
0 请登录后投票
   发表时间:2010-06-19  
chroya 写道
呃。。  题目都已经写了空指针了,郁闷,本来还想卖个关子的。
通常给用这样的方法修改对象里面的属性,而这里的list只是一个引用变量,没有指向任何的对象,所以方法里面的list是一个副本,new出来的对象也跟原list没关系。


深刻理解一下,java里面没有地址传递,所有的方法调用,无论参数是简单数据类型还是对象,都是值传递,就不会有疑问了。
0 请登录后投票
   发表时间:2010-06-19  
对的,都是值传递 ,记得这个就行了。
0 请登录后投票
   发表时间:2010-06-19  
wumingshi 写道
建议你换个IDE吧,用idea,它就提示你有问题了

是啊,这样的问题Eclipse肯定会提示不同的颜色。除非看花眼。。。
0 请登录后投票
   发表时间:2010-06-19  
”建议你换个IDE吧它就提示你有问题了“ 没明白啊  在Eclipse里肯定木错啊 符合java语法啊 不知道 上面指的是嘛意思
这是java基础问题 也算常见
其实 你传进方法里 new的 和你传一去的不是一个对象哦 ,其实就再上面说的 java就是值传递
0 请登录后投票
   发表时间:2010-06-19  
楼主写出这样的代码不是自找苦吃吗
0 请登录后投票
   发表时间:2010-06-19  
你就相当于:
Model.read(null);
0 请登录后投票
   发表时间:2010-06-19   最后修改:2010-06-19
if(list == null) {
			list = new ArrayList<String>();
		}


应该是这个地方有问题。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics