为什么某些语言需要先声明变量再使用,而其他语言则不需要?
在Python和Java中,变量声明时是如何分配内存的呢?没有编译步骤,解释型语言是怎么知道一个变量需要多少内存的呢?
1 个回答
3
在使用变量之前,必须先给它分配一个内存位置,然后进行初始化。这适用于Java、Python,甚至是Logo等语言。
声明变量意味着用一段特定的代码让这个变量“活”过来。以Java为例,代码可能是这样的:
int i;
Person p;
这些变量已经被声明,但还没有初始化。它们现在在内存中有了一个位置——在某些语言中,这个位置和大小可能会变化。但无论如何,现在内存中有了一个实际的位置,运行环境可以用来获取这个变量(可能是一个间接指针,或者是实际的位置)。
现在它有了一个空的“盒子”可以放东西,接下来就需要填充它,也就是要进行“初始化”:
i = 3;
p = new Person();
现在盒子里有了具体的内容,变量准备好了可以使用。如果在初始化之前就尝试使用它,在Java中会导致一个叫做NullPointerException
的错误。
有些语言要求你声明变量,以明确分配内存(位置和/或大小)。而有些语言会自动为你处理内存分配。正如你问题和这个回答的评论中提到的,情况有很多不同。