就像...是像 C++ 中的 0
吗?或者它是一些“特殊”对象?或者可能是完全不同的东西?
-- 编辑--
我确实知道它是什么,问题是 - 它是如何完成的
最佳答案
由于您询问的是实现细节,而不是语义,因此答案是特定于给定实现的。
在 C# 中,“null”可以是三种情况。引用、指针和可为 null 的类型。
C# 在 CLR 上的实现用零位表示空引用。 (其中位数是适合您正在运行的特定版本的 CLR 上的托管指针的大小。)
不出所料,空指针 的表示方式相同。您可以在 C# 中演示这一点,方法是创建一个不安全的 block ,创建一个指向 void 的空指针,然后将其转换为 IntPtr,然后将 IntPtr 转换为 int(或 long,在 64 位系统上)。果然,你会得到零。
null 可空值类型 也由 zeroes 实现,但方式不同。当你说
内部? j = null;
我们实际创造的在道德上等同于:
struct NullableInt
{
int value;
bool hasValue;
}
具有适当的访问器方法,等等。当这些东西之一被分配为空时,我们只需用零位填充整个东西。该值为整数零,hasValue 中填充了零,因此变为 false; hasValue 字段设置为 false 的可空类型被认为是空的。
我不知道 C#/CLI 的其他实现的实现细节是什么。如果它们不同,我会感到惊讶;这是实现 null 的明显且明智的方法。但是,如果您对特定的实现细节有疑问,则必须询问了解您感兴趣的实现的人。
关于c# - c#、java中的null是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2028298/