Java中的内存分配 - 声明与定义

时间:2014-04-25 19:55:43

标签: java c

在C中,当我们声明某些东西时,我们告诉编译器变量包含什么类型的东西。只有在定义期间,我们才为它分配内存空间。但是,在Java中,当我们声明变量

时,内存空间会被释放
int x; // allocates space for an int

我的场所是否正确?这是否意味着我们应该尽可能地使用decalarations?

2 个答案:

答案 0 :(得分:3)

当谈到Java中的变量时,声明和定义之间没有分离。但这并不影响内存分配过程。

Java中的内存分配发生了什么,接近于从C中的动态区域(即"堆")分配内存所发生的事情。在那里,定义指针类型的变量为变量分配空间本身,但它没有为指针指向的内容分配内存。以下是C:

中简单字符串操作的示例
// Allocate memory for the pointer
char *str;
// Allocate memory for the string itself
str = malloc(16);
// Copy the data into the string
strcpy(str, "Hello, world!");

处理对象时,Java中会发生类似的事情。定义变量为对象引用分配空间,但不为对象分配空间。您需要致电new以便"附加"引用新对象:

// Allocate memory for the reference
String str;
// Allocate memory for the string, and sets data
str = new String("Hello, world!");

请注意,这仅适用于对象。原始类型的处理方式不同,其方式与C中处理基元的方式更为相似。

答案 1 :(得分:2)

当分配对象实例的内存时,将分配原语的内存空间。对于静态原语,它将在加载类时分配。

不,你不应该尝试微观优化这些事情。这不是C,它是Java。

相关问题