思维导图学习法:Java基本类型与引用类型

Java基本类型

  Java共有8种基本类型,分别为 int long double float char boolean byte short。其中byte int long short是整型,float double是浮点型,char是字符型,boolean是布尔型。

Java引用类型

  简单来说除了8种基本类型之外都是引用类型。同时Java还为8种基本类型提供了对应的封装类型。分别为:Integer Long Double Float Character Boolean Byte Short。引用类型是一种对象类型,它的值是指向内存空间的引用,就是地址。

基本类型和引用类型的区别
默认值:

  整型byte、short、int、long的默认值都为0,浮点型float、double的默认值为0.0,boolean默认值为false,char默认值为空。引用类型默认值null。(但是我不懂给默认值是干嘛的,不进行初始化的变量也不能使用啊。后续需要研究一下)

内存分配

  基本数据类型的变量是存储在栈内存中,而引用类型变量存储在栈内存中,保存的是实际对象在堆内存中的地址。


思维导图学习法:Java基本类型与引用类型_第1张图片
内存分配
什么是引用

  简单来说,引用就是一个对象的别名。一个对象会在内存中请求一块空间存储数据,我们访问该对象时候,不是直接访问这块访问对象在内存中的数据,而是通过引用访问。引用也是数据类型,它指示了对象在内存的地址——只是我们知道引用的值罢了。
  如果我们定义了不止一个引用指向同一个对象,那么这些引用是不相同的,因为引用也是一种数据类型,需要一定的内存空间(stack,栈空间)来保存。但是它们的值是相同的,都指示同一个对象在内存(heap,堆空间)的中位置。比如:

思维导图学习法:Java基本类型与引用类型_第2张图片
示例图

  通过上面的代码和图形示例不难看出,a 和 b 是不同的两个引用,我们使用了两个定义语句来定义它们。但它们的值是一样的,都指向同一个对象 "This is a Text!"。但要注意String 对象的值本身是不可更改的 (像 b = "World"; b = a; 这种情况不是改变了 "World" 这一对象的值,而是改变了它的引用 b 的值使之指向了另一个 String 对象 a)。
思维导图学习法:Java基本类型与引用类型_第3张图片
示例图

引用本身也是一种数据类型,保存在栈(stack)中,然后它保存是地址,什么地址呢?是对象在内存中(heap,堆空间)的地址。


上文提到了基本类型对应的封装类型。这里继续研究一下。

自动装箱和自动拆箱

  Java从jdk1.5开始引入自动装箱和拆箱,使得基本数据类型与引用类型之间相互转换变得简单。
自动装箱:java自动将原始类型转化为引用类型的过程,自动装箱时编译器会调用valueOf方法,将原始类型转化为对象类型。
自动拆箱:java自动将引用类型转化为原始类型的过程,自动拆箱时编译器会调用intValue(),doubleValue()这类的方法将对象转换成原始类型值。

自动装箱主要发生在两种情况:一种是赋值时,一种是方法调用时。

赋值
Integer a = 3; //自动装箱
int b = a; //自动拆箱

方法调用

public Integer query(Integer a){
   return a;
}
query(3); //自动装箱
int result = query(3); //自动拆箱

  这其中又有很多问题需要研究,将另开一篇文章来研究。
  关于引用类型的讨论远非这么简单。java中到底有没有按引用传递和按值传递的区分?以及4种引用类型(强引用,弱引用,软引用,虚引用)的研究也将另开一篇来学习分享。

才疏学浅之处,切莫在意。
                              ——2019.7.2下午

你可能感兴趣的:(思维导图学习法:Java基本类型与引用类型)