一.基本数据类型与引用数据的区别
基本数据的变量保存的是原始值,变量就是数据本身。
常见的基本数据类型:byte,short,int,long,float,double,char,boolean
引用数据类型的变量保存的是变量的首地址空间,通过这个来操作。
常见的引用数据类型:类,接口,数组。
如图:
图中的num就是基本数据,直接保存数据。 s是引用数据类型,保存的实际的变量的地址空间
二.值传递和引用传递
值传递是对于基本数据类型来说,传递的自己的副本,这个副本改变不会对自己造成影响。
public class Test {
public static void main(String[] args) {
int b = 2;
System.out.println("main1:" + b);
che(b);
System.out.println("main2:" + b);
}
private static void che(int a) {
a = 100;
System.out.println("che:" + a);
}
}
输出结果
形参只是实参创建的一个副本,副本改变了,原本当然不可能跟着改变;
引用传递一般是对引用数据类型来说,传递的是该变量在堆空间引用地址,都是指向同一地址,操作的是它的源数据。
public class Test {
public static void main(String[] args) {
int[] b = {1,2,3,4};
System.out.println("main1:"+b[0]);
che(b);
System.out.println("main2:"+b[0]);
}
private static void che(int[] a) {
a[0] = 100;
System.out.println("che:"+a[0]);
}
}
输出结果
虚拟机栈的栈帧中的局部变量表存放的是基本数据类型和对象的引用
在一个方法中声明变量如果基本数据类型存放在栈空间,随着方法的结束出栈会随着一起出栈,所以无法在外部去调用局部变量 如果是引用数据类型 变量的实例存放在堆空间