基本数据类型一定存储在栈上么?
一、java中八大基本数据类型?
简单类型 | 二进制位数 | 封装类型 |
---|---|---|
boolean | 1 | Boolean |
short | 16 | Short |
int | 32 | Integer |
long | 64 | Long |
float | 32 | Float |
double | 64 | Double |
char | 16 | Character |
byte | 8 | Byte |
二、成员变量和局部变量的存放位置
- 成员变量:在类中但在方法外的变量,随类的消亡而消亡,所以成员变量存放在堆中。
在类中声明的成员变量可以是基本类型,也可以是引用类型。
–基本类型:变量名和对象都放在堆中;
–引用类型:变量名(存放内存地址值,指向所引用的地址)和值都放在堆中。
class Solution{
//a放在堆中,a中存放地址值,指向“abc”,“abc”放入堆中
String a = "abc";
//同理,b和1都放在堆中
int b = 1;
}
- 局部变量:在方法中的变量,当调用方法时,会在java占中生成栈帧,局部变量就存放在方法栈中,当方法调用结束就会释放该栈帧,所以局部变量随栈帧的销毁而结束,这就是局部变量只能在方法中有效的原因。
在方法中声明的变量可以时基本类型的变量,也可以是引用类型的变量。
—基本类型:变量名和值都放在栈中;
—引用类型:变量名(存放内存地址值,指向所引用的对象)放在栈中,该变量所指向的对象放在堆中。
class Solution{
public void Test(){
//a放在栈中,"abc"放在堆中
String a = "abc";
//b和1都放在栈中
int b = 1;
}
}
四、总结
Java的基本数据类型不一定存放在栈中,局部变量的基本类型存放在栈中,引用类型的变量名存放在栈中,但是变量名所指向的对象(基本数据类型)存放在堆中。而成员变量,不管是基本类型还是引用类型,变量名和对象都放在堆中。