在学习过对象的实例化之后, 我们知道对象的实例化就是为对象的创建开辟存储空间。
对于一条实例化语句:Student stu=new Student(); //语句1 先是声明一个名为stu的Student类型变量,然后利用new关键字为其创建实例。
与下面的语句相比较:Student stu; //语句2 语句2是声明一个类型为Student 的变量stu,从表述习惯上讲stu 是实例变量,但实际上此时stu并未成为一个真正的实例,它仅仅只是一个变量名字。
stu= new Student(); //语句3 语句3的执行结果就使得stu真正成为了一个Student实例,它指向了内存中的某块地址空间。 语句1是一步到位,定义了一个实例变量并同时赋值。
1.对于null的理解 为了明确地表示那些仅有名字而没有实例空间的变量的具体内容,Java引入了关键字null, null 就是表示“空”的意思,是绝对意义上的空,这个空指的是不存在的意思。为了更好地理解null是什么,这里举个例子: 有个准备进人施工阶段的楼字建筑项目,设计图纸已经确定了,建筑设计师们正在讨论某间单元的装修效果时,该单元的房号已经命名,假设为A901,此时,A901就是null的,它相当于上面写的语句2(一个名为stu的Student),这里它只是一个名为A901的房屋单元。
而当该楼字项目已经施工完毕的时候,则A901就地在它所处的位置上真正地占有了一块物理空间,此时它就是非null(非空)了,也就是说它拥有了一块实例化的空间。就算这间房屋里头没有摆放东西,它也是存在的。我们千万不能将日常表达语“一间空的房问”等同于Java语言中的"房间为空”。
在Java中,假设房间类为Room,则: Room room=null; //房间为空,房间room只是一个名字,实际不存在。 Room room= new Room(); //一间空的房间,这间房里没东西。
null就是空,抽象意义上的空,空就是无的概念。
对于null的理解,应该是这样的:仅有一个变量名,但实际上不存在。
2. null的作用 (1) 判断一个对象实例是否null,
用if(obj= = null){}来判断。 (2) 释放内存,让一个非null的实例变量赋值为null,这样这个实例指针引用就被释放了,等待JVM回收其对应的内存垃圾。
3.使用null时要注意的问题 (1) null是关键字,是大小写敏感的,不能将null写成Null或NULL.
(2) null用来标识一个空的对象,因此不能将null赋给基本型的变量。比如: String s= null; //正确 int i=null; //错误,应修正为"int i=0;"char c= null; //错误
(3) 对于一个值为null 的对象,如果你试图去访问其成员,则会触发空指针异常(NullPointerException)。 (4) 用instancaeof(判断对象是否属于某种类型)去操作null对象,会返回false.
如:有语句: String s= null; 则“s instanceof String”的结果是false。
(5) 可以使==或着!=操作来比较null值,但是不能使用其他算法或者逻辑操作,例如。
在Java中,null ==null将返回true。