Java中的null到底是啥?
2013-12-28 04:48
302 查看
我们从下面这个简单的语句说起:
在Java中,有2种主要的数据类型:基本数据类型和引用类型。定义成基本数据类型的变量用来保存值,而定义成引用的变量用来保存引用。所以上面这行代码所做的工作就是,声明了一个变量x,用来存储引用。这里x没有引用任何对象。
下面这张图能更清楚地表达出这一情况:
如果 x = "abc"的话,那么情况就如下图所示:
JVM规范中是这么说的:
所以,null到底是多少,取决于JVM实现厂商。它有可能就像C语言一样其实是个整数0.
在Java中,方法是放在当前线程的内存空间中的栈里的,每一个方法都放在这个栈的一个帧(frame)当中。所以,x就存放在该方法所在的帧里。
原文:http://www.programcreek.com/2013/12/what-exactly-is-null-in-java/
String x = null;
这行代码做了什么?
先回想一下什么叫做变量(variable),什么叫做值(value)。我们通常把一个变量比喻成一个盒子。我们可以用盒子来装东西,同样我们就可以用变量变保存值。定义变量时需要指定变量的类型。在Java中,有2种主要的数据类型:基本数据类型和引用类型。定义成基本数据类型的变量用来保存值,而定义成引用的变量用来保存引用。所以上面这行代码所做的工作就是,声明了一个变量x,用来存储引用。这里x没有引用任何对象。
下面这张图能更清楚地表达出这一情况:
如果 x = "abc"的话,那么情况就如下图所示:
null在内存里到底是什么?
首先,null不是一个合法的对象引用,所以系统并没有给它分配内存。它仅仅是一个用来表明该引用变量没有引用任何对象的值。JVM规范中是这么说的:
Java虚拟机规范并没有强制规定null应该是什么值。
所以,null到底是多少,取决于JVM实现厂商。它有可能就像C语言一样其实是个整数0.
x在内存中是什么呢?
现在我们已经知道什么是null了。变量其实是一个存储地址加上一个名字(标识符),可以用来存储一些值。那么 x 到底在内存中的什么位置呢?在Java中,方法是放在当前线程的内存空间中的栈里的,每一个方法都放在这个栈的一个帧(frame)当中。所以,x就存放在该方法所在的帧里。
原文:http://www.programcreek.com/2013/12/what-exactly-is-null-in-java/
相关文章推荐
- Java中的null到底是啥?
- Proxy实现java动态代理
- Java 中extends与implements使用方法
- Eclipse maven-resources-plugin 错误
- 复习 3 java 面向对象之接口和抽象
- 在Eclipse里自动导入相应包的类名的快捷键
- Proxy实现java动态代理
- 给JAVA的eclipse IDE 在线安装 SVN插件
- Struts1与Struts2原理 区别 详解 汇总
- 将 Flex 集成到 Java EE 应用程序的最佳实践
- eclipse中使用hibernate反向工程
- Google Code Jam Notes - Alien Language - Java
- Google Code Jam Notes - All Your Base - Java
- Google Code Jam Notes - Bad Horse - Java
- java 线程 thread
- Google Code Jam Notes - Captain Hammer - Java
- Java 之单实例与静态方法的工具集
- Google Code Jam Notes - Cross The Maze - Java
- Spring声明式事务
- spring编程式事务