如果我声明一些字符串变量,如
String str = null;
str
分配了内存? str
的变量已被声明?null
值,那么null
在二进制文件中的确切表示是什么?答案 0 :(得分:8)
当您执行以下操作时:
String str = null;
唯一分配的是对字符串的引用(这类似于包含指针类型的语言中的字符串指针)。此引用是一个32位或64位变量(取决于您的硬件架构和Java版本),它位于堆栈中(可能取决于您的声明所在的确切上下文)。
不应为null
本身分配内存,因为null
实际上不是有效的对象实例。它只是一个占位符,表示对象引用当前不是指对象。可能它只是文字值0
,因此将对象引用分配给null
等同于在C / C ++中将指针类型设置为NULL
。但最后一点是我的推测。
答案 1 :(得分:3)
Null是未绑定到对象的引用的值。
为参考变量本身分配空间,无论其值如何。 Null只是一个适合这个空间的值。
回答具体例子的每个问题。
答案 2 :(得分:2)
看看这个Java IAQ(不经常问的问题)“Is null an object?”。
回答你的问题:
答案 3 :(得分:1)
Java适用于引用。想想String str=null
,因为你在C中有指针,但不完全是指针。
现在内部表示依赖于JVM。计算参考的大小并不容易。每个JVM的实现都不同,因此没有必要提取低级别信息。
答案 4 :(得分:0)
完成这一行之后:
String str = null; // or String str;
只有类型String
的引用被分配到堆栈中。 null
表示您没有将任何值(对象)分配给引用str
到堆中。