基本数据类型传参和引用数据类型传参的区别

不管是基本数据类型传参还是引用数据类型传参传的永远是地址

基本数据类型(包括整数型,浮点型,字符型,布尔型等)是原子型数据------原子型数据就是不可再拆分的数据

引用数据类型(包括字符串,数组,对象等)是复合型数据-----复合型数据是指当前对象数据中,其实还包括了一些其他更多的子数据;或者说引用数据类型是由多个基本数据或引用数据组成的一个数据

举个例子:int a,b,c----a,b,c这三个字母单独来看的话,它们属于基本数据类型;

                 arr{a,b,c}-----将a,b,c三个字母放在一个数组里面,arr这个数组则属于引用数据类型,还可拆分成:a,b,c

基本数据类型传参--传的是常量在常量池中的地址

引用数据类型传参--传的是对象在堆内存中的地址

关于基本数据类型和引用数据类型的传参我用一下代码过程说明:

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);
    }
    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){//0xabc
        arr=new int[]{10,20};
    }
}

 对代码的解释:先让main函数进栈,在主函数中创建两个变量a,b。3第一次出现,将3放进常量池,将7放进常量池,再将3的地址给a,将7的地址给b,紧接着swap(a,b)函数进栈,开始时候swap接收到的是a,b的地址,相当于m接收到的是3的地址,n接收到的是7的地址,又由下面swap函数中,m=7,n=3说明m此时接收到的是7的地址,而n此时接收到的是3的地址,此时m,n的值改变,但是a,b的值没有改变,swap函数弹栈;接下来又在主函数中创建数组arr,数组arr又在堆内存中创建,数组有两个数3,7,数组创建完成之后,在堆内存中会有一个地址,将3,7的地址,给在堆中的数组,主函数中的arr拿到的是数组在堆中总的地址,紧接着swap(arr[0],arr[1])进栈,m和n开始拿到的是3,7的地址,而后又将7的地址给m将3的地址给n,此时数组里面没有改变;紧接着swap(arr)进栈,主函数将arr的地址给了swap中的arr,然后swap中的arr根据主函数给的地址去堆中找,将7的地址给了arr[0],将3的地址给了arr[1],此时堆中两个变量的地址发生了改变,swap(arr)弹栈,此时堆中的数发生了改变;

形参变量永远不可能去改变实参中已储存的数据地址 除非return 实参且接收
        就算形参变量所存储的数据地址被改变 那也是改变形参自己 与实参无关
        无非是:
            实参本身指向的是一个对象
            然后把这个对象的地址传递给了形参
            形参就可以通过该地址去堆内存中找对象,可以修改对象中的数据
            实参再去访问对象时,对象中的数据就已经被改变
            因为实参和形参目前使用操作的都是同一个对象!
        
        终结总结:
        无论实参还是形参 实参就是把变量空间所存的地址给了形参而已
        他们都是变量!
        所以对于变量的修改而言,主要分两种!
        1.要么改变该变量空间所存储的地址
        2.要么改变该变量空间所存储的地址所指向的那个对象中的数据

发布了21 篇原创文章 · 获赞 0 · 访问量 351

猜你喜欢

转载自blog.csdn.net/weixin_44318477/article/details/104414924