java基本类型和引用类型
很多初学者会弄不清java的变量基本类型和引用类型,下面我们来把这个知识点来捋清楚
基本类型
基本类型的变量是指在定义变量的时候,计算机会给变量创建一个存储空间。例如我们定义一个整数型int变量a时,
int a=10;
a=100;
计算机会自动在内存中划分四个字节的内存出来,并把这个内存给变量a。a的地址就是这个内存空间的地址,如果改变a的值,a还是在那个内存地址上,变的是地址上储存的值,由10变成100。
基本类型的分类
- byte
- short
- int
- long
- float
- double
- char
- boolean
引用类型
和基本类型不一样的是,引用类型的变量上存储的值不是直接的值,而是我们所需要的值的地址。
以数组为例:
//定义一个数组arr
int[] arr={1,2,3};
System.out.println("arr的引用值"+arr);
输出结果:
arr的引用值[I@5cad8086
数组和变量的存储是这样的:
计算机为数组{1,2,3}开辟一个了存储空间,而变量arr在另一个存储空间上,并且arr的值就是数组第一个元素地址的值。这样因为arr的值是数组首元素的值,arr就可以通过这个值来找到对应的存放数值的空间,从而得到相应的值。
如果把另一个数组赋值给arr,则arr自己本身的内存地址没有发生变化,值则变成新的数组的首元素地址的值
arr = new int[]{4, 5, 6};
System.out.println("arr的引用值" + arr);
而原先的数组会因为没有变量指向它而被java的自动回收机制清除掉,不复存在。
引用类型的分类:
除基本类型外均为引用类型,如数组,类,方法等等
区别
基本类型上的值就是我们所需要的的数值,改变变量的值则是改变存放在该内存空间上的数值。
而引用值类型上存放的是我们所需要的值的地址,如果单单改变值(改变arr[i]的值),arr的值是不变的(因为arr还是指向该数组),只有令arr指向新的数组,它的值才会发生变化。