Java 中没有
sizeof
运算符是出于什么设计原因?知道它在 C++ 和 C# 中非常有用,那么如果需要的话如何获取某种类型的大小呢?
因为基本类型的大小是由Java语言明确规定的。 JVM 实现之间没有差异。
此外,由于分配是由
new
运算符根据其参数完成的,因此无需指定所需的内存量。
有时知道一个对象将占用多少内存肯定会很方便,这样您就可以估计诸如最大堆大小要求之类的事情,但我认为 Java 语言/平台设计者并不认为这是一个关键方面。
在 c 中有用只是因为你必须手动分配和释放内存。然而,由于java中有自动垃圾收集,所以这是没有必要的。
c/c++ 和 c/c++ 中存在的运算符的大小是与机器相关的语言,因此不同的数据类型在不同的机器上可能有不同的大小,因此程序在执行对大小敏感的操作时需要知道这些数据类型有多大。 例如:一台机器可能有 32 位整数,而另一台机器可能有 16 位整数。
但是 Java 是独立于机器的语言,所有数据类型在所有机器上的大小都相同,因此无需查找 Java 中预先定义的数据类型的大小。
内存管理是由Java中的VM完成的,也许这可能对你有帮助:http://www.javamex.com/java_equivalents/memory_management.shtml
C 需要 sizeof,因为 int 和 long 的大小根据操作系统和编译器的不同而变化。 或者至少过去是这样。 :-) 在 Java 中,所有大小、位配置(例如 IEEE 754)都得到了更好的定义。
编辑 - 我看到 @Maerics 在他的答案中提供了 Java 规范的链接。
要增强Java应用程序的安全性,一种方法是不允许程序员摆弄内存。因此,不提供基元的大小就是这样的决定之一。同样,内存管理也不是由程序员完成的,而是由 JVM 完成的。