基本数据类型和引用数据类型

基本数据类型:byte、int、short、long、char、float、double、boolean

引用数据类型:类、接口类型、数组类型、枚举类型、注解类型

区别:

基本数据类型:在被创建的时,在栈上给其划分一块内存,将数值直接存储在栈上

引用数据类型:在被创建时,首先要在栈上给其引用(句柄)分配一块内存,而对象的具体信息存储在堆内存上,然后由栈上面的引用指向堆中对象的地址。

例如,有一个类Person,有属性name,age,带有参数的构造方法

Person p=new Person("zhangsan",20);

在内存中的具体创建过程:

1、首先在栈内存中为p分配一块空间;2、在堆内存中为Person对象分配一块空间,并为其三个属性设初值"",0;

3、根据类Person中对属性的定义,为该对象的两个属性进行赋值操作;4、调用构造方法,为两个属性赋值为"Tom",20;

5、将Person对象在堆内存中的地址赋值给栈中的p;通过引用(句柄)p可以找到堆中对象的具体信息。

静态区:保存自动全局变量和static变量(包括static全局和局部变量)。静态区的内容在总个程序的生命周期内都存在,由编译器在编译的时候分配。

堆区:一般由程序员分配释放,由malloc系列函数或new操作符分配的内存,其生命周期由free或delete决定。在没有释放之前一直存在,直到程序结束,由OS释放。其特点是使用灵活,空间比较大,但容易出错。

栈区:由编译器自动分配释放,保存局部变量,栈上的内容只是在函数的范围内存在,当函数运行结束时,这些内容也会自动被销毁,其特点是效率高,但空间大小有限。

文字常量区:存放常量字符串。程序结束后由系统释放。

参考:https://www.cnblogs.com/bekeyuan123/p/7468845.html

猜你喜欢

转载自blog.csdn.net/alice_0_0/article/details/80729124