比如下面的代码

String[] arr = new String[10];

arr=null;

将arr这个引用置空,不指向任何对象。

上面new的那个数组对象,则没有任何引用指向它,垃圾回收器可以回收此对象。

java中对象引用放在栈中,对象的实例放于堆中,一个对象要是只声明不赋值,则只会在内存的栈区创建引用,堆中并无此引用的指向。

而null对象在堆中会被java的垃圾回收机制回收。

关于null的其他解释:

来自

http://www.cnblogs.com/znsongshu/p/6282672.html

在Java中,null值表示引用不指向任何对象。运行过程中系统发现使用了这样一个引用时·可以立即停止进一步的访问,不会给系统带来任何危险。

1.如果是对象的field的话那么系统在初始化对象的时候会把那些对象的值赋值为null,基本数据类型也有它们的初始值

2.如果是在方法内,那么程序员需要自己给这些变量赋值。

class T{

Object obj = null;

Object obj1;//系统在初始化的时候会自动的给他赋值为null

}

class T{

public void x(){

Object obj = null;//这个需要程序员自己来做了

}

}

**类中的变量不用初始化

方法中的局部变量必须初始化**

一、null是代表不确定的对象

Java中,null是一个关键字,用来标识一个不确定的对象。因此可以将null赋给引用类型变量,但不可以将null赋给基本类型变量。

比如:int a = null;是错误的。Ojbect o = null是正确的。

Java中,变量的适用都遵循一个原则,先定义,并且初始化后,才可以使用。我们不能int a后,不给a指定值,就去打印a的值。这条对对于引用类型变量也是适用的。

有时候,我们定义一个引用类型变量,在刚开始的时候,无法给出一个确定的值,但是不指定值,程序可能会在try语句块中初始化值。这时候,我们下面使用变量的时候就会报错。这时候,可以先给变量指定一个null值,问题就解决了。例如:

Connection conn = null;

try {

conn = DriverManager.getConnection("url", "user", "password");

} catch (SQLException e) {

e.printStackTrace();

}

String catalog = conn.getCatalog();

如果刚开始的时候不指定conn = null,则最后一句就会报错。

二、null本身不是对象,也不是Objcet的实例

null本身虽然能代表一个不确定的对象,但就null本身来说,它不是对象,也不知道什么类型,也不是java.lang.Object的实例。

可以做一个简单的例子:

//null是对象吗? 属于Object类型吗?

if (null instanceof java.lang.Object) {

System.out.println("null属于java.lang.Object类型");

} else {

System.out.println("null不属于java.lang.Object类型");

}

结果会输出:null不属于java.lang.Object类型

三、Java默认给变量赋值

在定义变量的时候,如果定义后没有给变量赋值,则Java在运行时会自动给变量赋值。赋值原则是整数类型int、byte、short、long的自动赋值为0,带小数点的float、double自动赋值为0.0,boolean的自动赋值为false,其他各供引用类型变量自动赋值为null。

这个具体可以通过调试来看。

四、容器类型与null

List:允许重复元素,可以加入任意多个null。

Set:不允许重复元素,最多可以加入一个null。

Map:Map的key最多可以加入一个null,value字段没有限制。

数组:基本类型数组,定义后,如果不给定初始值,则java运行时会自动给定值。引用类型数组,不给定初始值,则所有的元素值为null。

五、null的其他作用

1、判断一个引用类型数据是否null。 用==来判断。

2、释放内存,让一个非null的引用类型变量指向null。这样这个对象就不再被任何对象应用了。等待JVM垃圾回收机制去回收。

感谢前辈们的总结!

java中任何变量都可以被赋值为null,java中当给一个对象赋值为null时发生了什么...相关推荐

  1. java中任何变量都可以被赋值为null,关于异常处理:为什么“throw null”没有在Java中创建编译错误?...

    class ThrowNull { public static void main(String[] args) { throw null; } } 我们知道throw的规则是throw Throwa ...

  2. 【Groovy】Groovy 动态语言特性 ( Groovy 中的变量自动类型推断以及动态调用 | Java 中必须为变量指定其类型 )

    文章目录 前言 一.Groovy 动态语言 二.Groovy 中的变量自动类型推断及动态调用 三.Java 中必须为变量指定其类型 前言 Groovy 是动态语言 , Java 是静态语言 ; 一.G ...

  3. java中所有函数都是虚函数_关于Java:虚拟函数与纯虚函数之间的区别是什么?...

    本问题已经有最佳答案,请猛点这里访问. Possible Duplicate: C++ Virtual/Pure Virtual Explained 虚函数和纯虚函数有什么区别? CPP中的纯虚函数与 ...

  4. python中、变量指向的对象可以发生变化吗_python中的引用传递,可变对象,不可变对象,list注意点...

    python中的引用传递 首先必须理解的是,python中一切的传递都是引用(地址),无论是赋值还是函数调用,不存在值传递. 可变对象和不可变对象 python变量保存的是对象的引用,这个引用指向堆内 ...

  5. java freemind_java环境变量的应用:为Freemind配置Java环境

    [java环境变量的运用]本文要分享的是java环境变量在FreeMind的应用,言外之意就是为FreeMind配置java环境,好的,那我们开始正题.安装并检查Java运行环境. FreeMind需 ...

  6. python中声明变量注意事项_我们如何在Python中声明变量?

    简短的答案是,无需在Python中声明变量. 以下是更详细的描述. 静态类型语言(C,C ++,Java,C#)要求在程序中使用变量之前,必须先声明要使用的变量的名称和类型声明.相应的语言编译器确保将 ...

  7. php命名空间中的变量,namespace-php如何通过命名空间使用其他文件中的变量

    比如有个 a.php 这样定义 三个文件在同一目录中,已经被正确require了,运行会出错! 而c.php 中输出a.php 和b.php 中的常量,比如c.php如下: 则能正确输出. 所以问题来 ...

  8. java if 定义变量_java – 如何分配在if else语句中定义的变量

    我需要创建能够在GMT中找到当前小时并将其转换为EST的内容. 当我尝试编译并运行程序时,我收到此错误:currentHourEST无法解析为变量.我认为我的问题是if else语句中的某个地方,因为 ...

  9. java中为什么需要常量和变量的区别_Java中的变量和常量

    1.变量(variable) 变量,顾名思义,就是变化的量. 我们可以通过变量来操作存储空间中的数据,变量就是指代这个存储空间,一旦你定义了一个一个变量,那么空间的位置就确定了,虽然空间位置是确定的, ...

最新文章

  1. 剑指云内存数据库,阿里云在下一盘大棋
  2. 用例设计大全(整理)
  3. kl距离 java_信息量、熵、最大熵、联合熵、条件熵、相对熵、互信息。
  4. c# Sockect 通信
  5. (2) nginx信号量
  6. JS (intermediate value).Format is not a function问题解决
  7. C#中获取当前时间:System.DateTime.Now.ToString()用法
  8. 汇编为什么分段执行总是执行不了_iOS汇编教程(六)CPU 指令重排与内存屏障...
  9. solidity 十六进制字符串转十六进制bytes
  10. hive数据写入elasticsearch
  11. Jenkins 学习总结(8)—— Jenkins X 入门实践
  12. 版本控制工具(svn)
  13. Atitit.月度计划日程表 每月流程表
  14. Helen人脸数据集生成人脸分割
  15. win7共享xp打印机_解决共享打印机不能使用的问题
  16. 安装和配置Oracle10g详细教程
  17. jQuery详细教程,基础内容罗列
  18. VUE 保证输入框无法输入半角数字以外的字符
  19. 除法运算符号“/” ——不同形式参数,商的不同
  20. Spark的搭建及实现单词统计

热门文章

  1. 基于SSM的住院病人监测预警信息管理系统毕业设计源码021054
  2. python积累--读写文本文件实例
  3. iHRM 人力资源管理系统_第9章_文件上传与PDF报表入门_第二节_PDF报表入门
  4. 如何快速判断一个文件是否为病毒
  5. 开源的跨平台AI模型部署总有一款是你的菜
  6. Windows和Linux简单命令的总结
  7. 利用audacity分析浊音、清音、爆破音的时域及频域特性
  8. Pcie(igb)网卡调试总结:tx uint hang异常解决方法
  9. vscode登陆中国版leetcode
  10. python123m与n的数学运算_【Python数学面试题】面试问题:Python“… - 看准网