基本数据类型和引用型数据类型的区别(一)

314 阅读2分钟

Java中的数据类型分为8种基本数据类型【int,string,short,long,double,float,boolean,char】和3种引用型数据类型【数组、类、接口】。 先看一下代码,思考代码的输出结果ia,ib分别等于多少?

public class demo01 {
    /*自定义成员方法实现将参数传入的整数修改后打印的功能*/
    void setArg(int ia){
        ia = 200;
        System.out.println("ia= " + ia);//ia=?
    }
    public static void main(String[] args) {
        demo01 demo01 = new demo01();
        int ib = 10;
        demo01.setArg(ib);
        System.out.println("ib= " + ib);//ib=?
    }
}

结果是: ia=200,ib=10

原因为:main方法是入口,代码从上往下运行,执行到setArg方法时调用setArg方法,将ib=10复制一份传给ia后,ia又被修改为200,所以ia打印为200,然后返回main中继续执行输出语句,ib的值本身没被改变,所以打印仍为10.

画出栈为:

image.png

再来看这组代码:

public class demo01 {
    /*自定义成员方法实现将参数传入的整数修改后打印的功能*/
    void setArr(int[] arr1){
        arr1[0] = 200;
        System.out.println("arr1[0]= " + arr1[0]);//arr1[0]=?
    }
    public static void main(String[] args) {
        demo01 demo01 = new demo01();
        int[] arr2 = new int[]{10,20};
        demo01.setArr(arr2);
        System.out.println("arr2[0]= " + arr2);//arr2[0]=?
    }
}

结果是: arr1[0]=200; arr2[0]=200;

这二者区别为:基本数据类型里存放的就是值,变量将值复制了一份传给了ia,而引用型数据类型里存放的是地址,相当于是把地址复制了一份给你,最后ia.ib都指向了同一个地址,画出栈区如下:

image.png 那么,我们再来修改一下,新增一行代码,结果又如何呢?

public class demo01 {
    /*自定义成员方法实现将参数传入的整数修改后打印的功能*/
    void setArr(int[] arr1){
        arr1 = new int[2];//加上该行代码后结果如何?
        arr1[0] = 200;
        System.out.println("arr1[0]= " + arr1[0]);//arr1[0]=?
    }
    public static void main(String[] args) {
        demo01 demo01 = new demo01();
        int[] arr2 = new int[]{10,20};
        demo01.setArr(arr2);
        System.out.println("arr2[0]= " + arr2);//arr2[0]=?
    }
}

结果为: arr1[0]=200; arr2[0]=10;

原理为:arr1 = new int[2];这行代码有new了一个新的内存地址,所以

image.png

学会了,点个赞再走吧~!