前言
在学习Java中变量的数据类型时,发现其分为2大类:基本数据类型、引用数据类型。
其中,属于“引用数据类型”的有:String、数组、类、接口。
相比C语言,Java中的“引用数据类型”,和C语言中的“指针”比较相似,所以这里将两者进行对比分析。
1. Java中“基本数据类型”和“引用数据类型”变量在内存分配时的不同
- 对于“基本数据类型”的变量:当你定义变量
int i = 0;
那么它在内存里的分配是这样的:内存里分配了一块空间,这块空间的名字是i,里面的内容是0。当你使用i的时候就可以访问这块空间里的内容。 - 对于“引用数据类型”的变量:引用类型的变量,在内存分配时,会分配两块内存,一块存储引用,一块存储值。进一步,如果是通过new来创建引用变量,则两块内存分别是栈(来存储引用变量)和堆(来存储引用变量所指向的值);如果不用new,则两块内存都在栈中。
例如:
不同方式定义字符串时堆和栈的变化:(参考:深入解析Java new运算符)
public class Test {
public static void main(String[] args