`
chroya
  • 浏览: 664064 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

阅读更多

      今天碰到了一个空指针异常,代码看起来很普通,一点也看不出会空指针,后来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());
	}
}

 会输出什么呢?

 

 大家可以先猜一猜。

分享到:
评论
10 楼 s-s-h 2010-06-19  
自己对于这个JAVA传值还真的不是很清楚
多谢LZ和回答的朋友了
9 楼 不会取名 2010-06-19  
if(list == null) {
			list = new ArrayList<String>();
		}


应该是这个地方有问题。
8 楼 joehe 2010-06-19  
你就相当于:
Model.read(null);
7 楼 laolinshi 2010-06-19  
楼主写出这样的代码不是自找苦吃吗
6 楼 whaosoft 2010-06-19  
”建议你换个IDE吧它就提示你有问题了“ 没明白啊  在Eclipse里肯定木错啊 符合java语法啊 不知道 上面指的是嘛意思
这是java基础问题 也算常见
其实 你传进方法里 new的 和你传一去的不是一个对象哦 ,其实就再上面说的 java就是值传递
5 楼 haoweishow 2010-06-19  
wumingshi 写道
建议你换个IDE吧,用idea,它就提示你有问题了

是啊,这样的问题Eclipse肯定会提示不同的颜色。除非看花眼。。。
4 楼 glamey 2010-06-19  
对的,都是值传递 ,记得这个就行了。
3 楼 IcyFenix 2010-06-19  
chroya 写道
呃。。  题目都已经写了空指针了,郁闷,本来还想卖个关子的。
通常给用这样的方法修改对象里面的属性,而这里的list只是一个引用变量,没有指向任何的对象,所以方法里面的list是一个副本,new出来的对象也跟原list没关系。


深刻理解一下,java里面没有地址传递,所有的方法调用,无论参数是简单数据类型还是对象,都是值传递,就不会有疑问了。
2 楼 wumingshi 2010-06-19  
建议你换个IDE吧,用idea,它就提示你有问题了
1 楼 chroya 2010-06-18  
呃。。  题目都已经写了空指针了,郁闷,本来还想卖个关子的。
通常给用这样的方法修改对象里面的属性,而这里的list只是一个引用变量,没有指向任何的对象,所以方法里面的list是一个副本,new出来的对象也跟原list没关系。

相关推荐

    c语言中易犯错误集合

    4. **指针错误**:不正确的指针操作,如空指针解引用、指针类型不匹配或忘记释放指针指向的内存,都可能导致程序崩溃。使用指针时要格外小心,确保它们始终指向有效的内存区域。 5. **类型转换问题**:C语言中没有...

    C 指针 C++ 最权威资料 稿件 代码 容易犯错的地方

    3. 空指针:NULL 或 nullptr(C++11 及以后版本)是一个特殊的指针值,表示指针不指向任何对象。使用空指针进行解引用会导致程序崩溃,因此在使用指针前检查是否为空至关重要。 4. 动态内存管理:C++ 的 new 和 ...

    数据结构中指针的应用及分析.pdf

    本文将深入探讨指针在单链表、链栈以及链队列中的应用,并分析在这些结构中使用指针时容易犯的错误以及错误产生的原因,旨在帮助学生和开发者更深入地理解和掌握指针在数据结构中的应用。 首先,需要明确的是数据...

    java解惑(java谜题)中文版的

    8. **null值**:Java中的null引用处理需要特别小心,空指针异常(NullPointerException)是常见的运行时错误。 9. **泛型**:Java泛型是强类型的,理解类型擦除和边界限制能帮助避免类型安全问题。 10. **枚举与...

    c语言坑爹大冒险.rar

    学习如何安全地使用指针,理解指针与数组、函数参数之间的关系,以及如何避免空指针解引用和野指针,都是C语言中的"坑爹"部分。 2. **内存管理**:C语言没有自动垃圾回收机制,程序员需要手动分配和释放内存。不...

    C 的内存管理 高手必看

    - **规则7-2-1**:使用`malloc`或`new`分配内存后,应立即检查指针值是否为`NULL`,以避免使用空指针。 - **规则7-2-2**:为数组和动态内存赋初值,避免使用未初始化的内存。 - **规则7-2-3**:避免数组或指针的下标...

    C语言难点分析整理

    52. 空指针究竟指向了内存的哪个地方 260 53. 算术表达式的计算 265 54. 结构体对齐的具体含义 269 55. 连连看AI算法 274 56. 连连看寻路算法的思路 283 57. 重新认识:指向函数的指针 288 58. 链表的源码 291 59. 高...

    Effective C++

    6. **条款6:区别指针与引用** - 指针可以为空,可以被重新赋值,而引用一旦初始化后就不能改变,始终引用同一对象。 7. **条款7:将动态分配作为例外** - 动态分配通常意味着手动内存管理,容易出错。尽可能使用栈...

Global site tag (gtag.js) - Google Analytics