Java内存中究竟是什么null

Div*_* SR 5 java null

如果我声明一些字符串变量

String str = null; 
Run Code Online (Sandbox Code Playgroud)
  • 是否为变量分配了内存str
  • 如果已分配,将分配多少字节?
  • 如果没有分配,JVM如何知道有一些str被声明的变量?
  • 如果已分配并且null内存中有值,那么null二进制的表示究竟是什么?

aro*_*oth 8

当你做类似的事情时:

String str = null;
Run Code Online (Sandbox Code Playgroud)

分配的唯一东西是对字符串的引用(这类似于包含指针类型的语言中的字符串指针).此引用是一个32或64位变量(取决于您的硬件体系结构和Java版本),它位于堆栈中(可能取决于您的声明所在的确切上下文).

不应为null自身分配内存,因为null它实际上不是有效的对象实例.它只是一个占位符,表示对象引用当前不是指对象.可能它只是文字值0,因此分配对象引用null等同于NULL在C/C++中设置指针类型.但最后一点是我的猜想.


And*_*mas 3

Null 是未绑定到对象的引用的值。

无论其值如何,都会为引用变量本身分配空间。Null 只是一个适合该空间的值。

针对具体例子来回答每个问题。

  • 是的,为变量 str 分配了空间。
  • 为引用变量分配的内存大小可能是四个字节。
  • 它被分配,JVM 按照编译代码的指令来访问它。
  • 没关系。