这些内容虽然枯燥,但多读几遍,就可以理解传参问题,这样可以更好理解函数。
基本数据类型 是原子型数据 就是不可再拆分
引用数据类型 是复合型数据 当前对象数据中,其实还包括了其他更多的子数据
复合型数据 指的就是由多个基本数据或其他引用数据组成的一个数据
基本数据类型传参 传的是常量在常量池中的地址
引用数据类型传参 传的是对象在堆内存中的地址
记住一点,实参——>形参 传的永远是地址
形参变量永远不可能去改变实参中已储存的数据地址 除非return 实参且接收
就算形参变量所存储的数据地址被改变 那也是改变形参自己 与实参无关
【实参本身指向的是一个对象
然后把这个对象的地址传递给了形参
形参就可以通过该地址去堆内存中找对象,可以修改对象中的数据
实参再去访问对象时,对象中的数据就已经被改变
因为实参和形参目前使用操作的都是同一个对象!】
终结总结:
无论实参还是形参 实参就是把变量空间所存的地址给了形参而已
他们都是变量!
所以对于变量的修改而言,主要分两种!
1.要么改变该变量空间所存储的地址
int a=3;
a=7;
int[] arr=new int[]{3,7};
return arr=new int[]{7,3};//主函数在接收一下。
2.要么改变该变量空间所存储的地址所指向的那个对象中的数据
int[] arr=new int[]{3,7};
arr[0]=7; arr[0]=3;
对与基本数据类型而言,能否支持2操作 不能!
class Test02{
public static void main(String[] args){
int a=3;
int b=7;
swap(a,b);
System.out.printf("a=%d,b=%d\n",a,b);
int[] arr={3,7};
swap(arr[0],arr[1]);
System.out.printf("arr[0]=%d,arr[1]=%d\n",arr[0],arr[1]);
swap(arr);
System.out.printf("arr[0]=%d,arr[1]=%d\n",arr[0],arr[1]);
swap2(arr);
System.out.printf("arr[0]=%d,arr[1]=%d\n",arr[0],arr[1]);
}
public static void swap(int m,int n){//改变了形参数据,对实参指向的地址中的数据无影响
m=7;
n=3;
}
public static void swap(int[] arr){//改变该变量空间所存储的地址所指向的那个对象中的数据
arr[0]=7;
arr[1]=3;
}
public static void swap2(int[] arr){//改变该变量空间所存储的地址
arr=new int[]{7,3};
}
}