深入理解Java基本数据类型与引用数据类型

  • ​​Java数据类型​​
  • ​​基本类型(primitive type)​​
  • ​​引用类型(reference type)​​
  • ​​Java中基本数据类型和引用数据类型的存放位置​​
  • ​​栈和堆​​
  • ​​栈和堆的特点​​
  • ​​当在方法中声明变量(局部变量)​​
  • ​​在类中声明的变量(成员变量/全局变量)​​

Java数据类型

基本类型(primitive type)

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

引用类型(reference type)

什么是引用类型:如果一个变量中存储着另一块内存的地址,那么就称该变量是某对象的引用。

java里面数据类型除了基本类型之外,其他类型都是引用类型
引用类型 三种:类、接口、数组

声明任何类型的变量,都会在在内存中分配一定的空间。

Java中基本数据类型和引用数据类型的存放位置

对于基本数据类型的存放文职不能都说是存储在stack中,对于基本数据类型来说,存储在栈中还是在堆中,这取决于基本数据类型声明的位置。是声明在方法中还是声明在类中。

在此之前先明确一下栈和堆的基本概念和特点。

栈和堆

栈和堆是两种数据结构,都只能在一端对数据进行插入和删除等操作。
在java中栈和堆都是用来在内存中存储数据的地方。
栈,是先进后出。
堆,先进先出。

栈和堆的特点

栈,存储速度比堆快,它的生命周期和大小都是确定的,不能够动态变化。
栈数据在多线程或者多个栈之间不可以进行共享
在栈中多个值相等的变量可以指向同一个地址
堆可以动态地分配内存的大小,生命周期也是动态的
堆是所有线程共享的内存区域。
并且java的垃圾回收期GC对自动的回收不在使用的堆数据
堆的缺点是,在运行的时候动态分配内容,存取速度相对于栈来说比较慢

当在方法中声明变量(局部变量)

每当程序调用方法的时候,系统会为该方法建立一个方法栈,其中所有方法声明的变量都放在方法栈中,当方法结束的时候系统会释放方法栈,在该方法中声明的变量随着栈的销毁而结束,这就是局部变量只能在方法中有效的原因。

在方法中声明的变量可以是基本类型的变量,也可以是引用类型的变量。
(1)当声明是基本类型的变量的时,其变量名及值(变量名及值是两个概念)是放在方法栈中
(2)当声明的是引用变量时,所声明的变量(该变量实际上是在方法中存储的是内存地址值)是放在方法的栈中,该变量所指向的对象是放在堆类存中的。

在类中声明的变量(成员变量/全局变量)

放在堆中的因此全局变量不会随着某个方法执行结束而销毁
同样在类中声明的变量即可是基本类型的变量 也可是引用类型的变量
(1)当声明的是基本类型的变量其变量名及其值放在堆内存中的
(2)引用类型时,其声明的变量仍然会存储一个内存地址值,该内存地址值指向所引用的对象。引用变量名和对应的对象仍然存储在相应的堆中.

public class Person {
int a;
Person xiaoMing;
@Test
public void test() {
Person xiaoHong=new Person();
int b;
}
}

深入理解Java基本数据类型与引用数据类型_java