Java中的null究竟是什么?

让我们从下面的声明开始吧:

String x = null;
上面的声明到底做了什么?

回忆一下,什么是变量,什么是值?通常把变量比作一个箱子,就像你可以用箱子装一些东西那样,您可以用变量来保持一个值。当声明一个变量的时候,我们需要设置变量的类型。
Java中有两种主要的类型:基本数据类型和引用类型。变量就可以声明为基本数据类型也可以声明为引用类型。在这种情况下,初始化声明声明了一个变量”X”,“X” 保存了一个字符串的引用,这里的引用是null。
下面的图片给了我们一个对这个概念更加清晰的理解。
what-exactly-is-null-in-java
如果 x=”abc”,它看上去应该像下面这样:
what-exactly-is-null-in-java

2.null在内存中到底是什么呢?

null在内存中到底是什么呢?或者说null值在Java中是什么呢?
首先,null不是有效的对象实例,所以不需要为它分配内存空间,它仅仅只是一个表明该引用目前没有指向任何对象的值。
JVM规范中有这么一句话:

The Java Virtual Machine specification does not mandate a concrete value encoding null.
JVM规范没有指明一个编码为null的具体值。

它表现为像C语言中的0地址那样的东西。

3.x在内存中到底是什么呢?

现在我们知道了null是什么东西了,此外,我们也知道了变量是一个保存了一些值的存储空间的地址。那么x到底在内存的哪个地方呢?
从“JVM运行时的数据存储区”示意图中我们知道,既然每一个方法在线程栈中都有一个私有的栈帧,本地变量被放在栈帧中。
引用:
1.变量,操作符号和表达式
2.变量
3.JVM规范

原文链接

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值