Java: null是什么??

null是什么?


 在学习过对象的实例化之后, 我们知道对象的实例化就是为对象的创建开辟存储空间。

对于一条实例化语句:
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。

猜你喜欢

转载自blog.csdn.net/weixin_44015669/article/details/89764195