回答
我尝试用C++来explan它:
在C++中的整数,布尔......被直接分配到内存中,所以如果你创建它仅使用四个字节的值的整数变量。如果你想创建一个可为空的整数变量,你必须创建一个指向存储该值的内存的指针,所以如果指针为空(0x0),它将指向任何内容。如果它不为空,它指向整数的实际值。
如果你想添加两个整数,你可以用一个汇编指令来完成它,因为这些值可以直接传递给处理器。
这可以转移到C#/ Java的字节码。原语可以直接由C#/ Java-Virtual Machine使用。所有其他变量不能直接使用,它们必须由编译器“取消引用”。
因为它们不能保持空值它们不是对象只有对象可以保留空值它们有自己的默认值的原始类型例如:
char hold'\ u0000'作为它的默认值,但是如果你想用一个空值,你应该使用字类,而这是一个单个字符实例的容器... :) 我希望这将帮助你:)
我认为OP是知道的,他问为什么 –
正如你引述
null关键字是表示nu的文字参考,不涉及任何对象。 null是引用类型变量的默认值。
不像对象原语持有数据,而不是引用。由于基元没有机会参与其中,所以null
对它们没有任何意义。
值类型是结构..他们只能保存值。例如,int在c#中存储1,2等。我们不能通过创建对象来引用它们。
当它被认为是字符串或任何类...它们可以被引用。如果它具有null意味着不引用任何东西..
最后,我想说的值类型存储值和对象存储值的参考:)
的null
价值点什么都没有,所以这是一个(不存在)的参考。在Java中,Object
是引用类型,因此对象类型值可以包含空值(例如,Integer
)。另一方面,基元是值类型而不是引用类型,因此它们不能是null
。
的Java的设计,因为性能方面的考虑这种方式。使用引用比使用值更慢,消耗内存更多。
因为类型例如像整型,布尔等都是值类型他们必须初始化后,有一定的价值。
在C#如果初始化INT那样(不分配任何值):
int someInt;
在默认分配值0。变量必须有一个特定的值。
在引用类型像对象的字符串或实例:
string someString;
SomeClass someObject;
在默认分配空;
- 1. 为什么Object []可以存储基元?
- 2. 为什么“”不是空的?
- 3. 什么是UI基元
- 4. 为什么在C#中比较可空和不可空int?
- 5. 为什么kafka是基于pull而不是基于push的?
- 6. 为什么`request.files`是空的?
- 7. 为什么我MultipartFile是空
- 8. COMPOSER_HOME为什么是空的?
- 9. 为什么request.body是空的?
- 10. 为什么TextView.text是空的
- 11. 为什么我的元素为空?
- 12. State Monad,为什么不是元组?
- 13. XML-to-JSON:什么是基本元素?什么是财产?
- 14. mysql UPDATE说列不能为空。为什么它是空的?
- 15. 为什么java不打破空格不是空白字符?
- 16. 什么是使主键可为空号与非空的
- 17. 休眠列表为空或空......可能是什么原因
- 18. 为什么这个CalendarView是空的(什么都不显示)?
- 19. 什么是'不可验证的代码',为什么它不好?
- 20. 外键可为空。为什么需要?
- 21. 为什么不是ODBCConnection.State可靠?
- 22. 为什么JavaScript NodeList是不可变的?
- 23. 为什么FindWindow()不是100%可靠?
- 24. 为什么大部分从localeconv基本上都是空的?
- 25. XML,这是什么:null或空元素?
- 26. 什么是空xml元素用于?
- 27. 为什么不是包含两个空列表的元组是一个空元组?
- 28. 可编辑的gridview - 什么是基础?
- 29. 为什么可空类型的行为是这样
- 30. 不可空值转换为可空类型的基本知识
由于性能cosideration.In C#nullables的是结构和在Java中包装类(整数)是引用类型。 –
如果您不明白变量是什么以及CPU指令的C#语言抽象程度有多高,这是一个很好的问题。 – Sinatr