就如何将变量存储在RAM中而言,“ int?X = 0”和“ int?X = null”之间有什么区别?


回答 1:

可为空的类型将具有某种额外的字段,用于指示该值是否有效。看起来您的示例在C#中。在这种情况下,是int吗?是System.Nullable 的简写。 System.Nullable 是一种通用类型,它用一个额外的布尔字段HasValue包装T。该额外的布尔字段将与T的存储一起存储在内存中。在C#中为可空值类型添加的语法隐藏了使用该字段的基础操作。

从概念上讲,代码如下所示:

诠释? x = 0; //转换为
x.Value = 0;
x.HasValue = true;

诠释? x = null; // 翻译成
x.HasValue = false;

在值类型的所有位模式均有效(例如整数)的任何情况下,该语言都需要添加某种额外的字段或指示符,以显示是否存在有效值或该变量是否应视为空值。从理论上讲,如果编译器知道某些位模式不是有效值,则可以使用无效模式之一来指示空值,并且不使用任何额外的存储空间。但是实际上,这可能是不可能的,因此您总是会看到正在使用某种额外的内存块。

可空结构(系统)


回答 2:

这完全取决于编程语言的实现方式。可以根据硬件和特定的编译器,以多种不同的方式实现相同的语言。

话虽如此,在许多语言中,变量标识了存储实际数据的特定存储位置。如果变量的值甚至为零,则将设置位置。如果为null,则位置本身将设置为无意义的值,零或其他。


回答 3:

这完全取决于编程语言的实现方式。可以根据硬件和特定的编译器,以多种不同的方式实现相同的语言。

话虽如此,在许多语言中,变量标识了存储实际数据的特定存储位置。如果变量的值甚至为零,则将设置位置。如果为null,则位置本身将设置为无意义的值,零或其他。


回答 4:

这完全取决于编程语言的实现方式。可以根据硬件和特定的编译器,以多种不同的方式实现相同的语言。

话虽如此,在许多语言中,变量标识了存储实际数据的特定存储位置。如果变量的值甚至为零,则将设置位置。如果为null,则位置本身将设置为无意义的值,零或其他。


回答 5:

这完全取决于编程语言的实现方式。可以根据硬件和特定的编译器,以多种不同的方式实现相同的语言。

话虽如此,在许多语言中,变量标识了存储实际数据的特定存储位置。如果变量的值甚至为零,则将设置位置。如果为null,则位置本身将设置为无意义的值,零或其他。