![]() |
1
17
C和Java都有原始的(或“值”)类型:int、双、浮点等等。 然而,在这之后,C和Java趋于分裂。
Java具有包装类类型
所有原始类型
(这是Java中的一个小的有限集),允许它们被当作对象。
C不提供这种直接包装
一
-部分原因是C支持
无限值类型集
通过
structures
相反,C通过引入
注意
回应评论: 绝对正确,可以为空的值类型允许它有更紧凑的内存占用 在某些情况下 因为它可以避免引用类型的内存开销: What is the memory footprint of a Nullable<T> .但是,它仍然需要比不可为空的类型更多的内存,因为它必须记住该值是、好是、空还是不。根据对齐问题和VM实现的不同,这可能比“完整”对象小很多,也可能不是。此外,由于C/clr中的值已被重新确定,请考虑必须执行的任何提升操作:
文章
Java Tip 130: Do you know your data size?
谈论引用类型内存消耗(在Java中)。需要注意的一点是,JVM内部有专门的数组版本,每个基元类型和对象都有一个(但是,请注意,本文包含一些
误导性陈述
)注意对象(与原语相比)如何引起额外的内存开销和字节对齐问题。但是,可以将优化后的数组大小写扩展到
然而,一个对象只需要一个小的固定大小就可以在一个可变的槽中保持对它的“引用”。类型的可变槽
一
C语言支持一组固定的
别名
对于允许访问“友好小写”类型名称的基元/通用类型。例如,
|
![]() |
2
10
在Java进行自动装箱/解压之前,必须手动转换原语和一流对象之间的关系:
在Java 1.5中改变了,所以你可以这样做:
Java将自动插入代码来镜像上面的示例。
C是不同的,因为“基元”类型的数量是无限的(clr调用的类型
value types
)这些行为大多类似于Java的原语,使用
值语义
. 可以使用创建新的值类型
因此您可以使用值类型(例如
|
![]() |
3
1
在C中,分离对象的最佳方法是“值类型”,它有点像原语。-
|
![]() |
A B · C#Excel自动调整列避免长文本时出错 5 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 5 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 5 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 6 月前 |