首页 技术 正文
技术 2022年11月13日
0 收藏 962 点赞 2,574 浏览 1142 个字

翻译人员: 铁锚

翻译时间: 2013年11月11日

原文链接: What
exactly is null in Java?

让我们先来看下面的语句:

String x = null;

1. 这个语句到底做了些什么?

  让我们回顾一下什么是变量,什么是变量值。一个常见的比喻是 变量相当于一个盒子。如同可以使用盒子来储存物品一样,您可以使用一个变量来存储一个值。当声明一个变量时,我们需要设置其类型。

在Java中变量分为两大类型: 原始值(primitive)与引用值(reference).

声明为原始类型的变量,存储的是实际的值;声明为引用类型的变量,存储的是实际对象的地址(指针,引用).

在上面的语句中, 初始化语句定义了一个变量 “x”. x中存放的是String引用,此处为 null.

下图对此概念提供了更形象的说明:

图1

如果 x = “abc”,则引用示意图如下:

图2

2. 在内存中null具体是什么?

在Java中 null 值是什么,在内存中null是什么?

首先需要明确,null不是一个合法的object实例,所以并没有为其分配内存. 

null 仅仅用于表明该引用目前没有指向任何对象。

我们看看 JVM规范 的描述:

Java虚拟机规范并不强制要求使用一个具体的值编码null。

我认为和其它类C语言一样,null是对引用变量的值全部置0。

译者注: Java对象的属性域默认初始化其实很简单,把分配的内存所有位全部置0,所以 数字是0, boolean是false, 浮点是 0.0f, 引用是 null, 因为引用是内存地址,所以可以推测出 null 实际上就是一堆0. 用鼠标手想一想也就明白, 地址 0 肯定是不可以存放任何对象的。

3. x在内存中存放在何处?

现在我们知道什么是null,并且也知道一个变量就是一个存储位置加上一个相关的符号名(标识符),包含了一些值。那么x存放在内存中的什么地方呢?

通过阅读

JVM 运行时数据区

, 我们知道,既然每个方法都在线程的栈空间中有一个私有的栈帧,那么局部变量就存放在栈帧里面.

补充说明: 如果语句在方法内部,那么x就是局部变量,存放在栈帧之中.

如果在编写不规范的代码中,例如

private String x = null;

但是将 private 忘记写了,则会从属于对象,分配在堆内存的某个对象内部。

参考文章:

1. Variables,
Operators, and Expressions

2. Variable

3. JVM
Specifications

相关阅读:

  1. Java 数组在内存中的结构
  2. Declaration,
    Initialization and Scoping for Java
  3. Notes
    from “Sun Certified Programmer for Java 6 Study Guide”
  4. String
    is passed by “reference” in Java
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,497
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,910
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,744
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,498
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,137
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,301