方法调用时参数传递的问题

方法调用时,参数除了可以传递基本数据类型,还可以传递引用数据类型,这两种参数在传递的时候会有一些差异,在使用的时候需要注意

基本数据类型的参数传递

m1方法中的i和main方法里面的i的值分别是多少?

public class ParamTest01{

    public static void m1(int i){
        i++;
        System.out.println("m1里面的变量i=" + i); 
    }

    public static void main(String[] args){

        //局部变量
        int i = 10;

        //调用
        m1(i);

        System.out.println("main里面的变量i=" + i);
    }

}

打印的结果是:

m1里面的变量i=11
main里面的变量i=10

出现这个结果的原因就是main方法里面的i和m1方法里面的i分别占用的是两块不同的内存,请看下图,main方法栈帧和m1方法栈帧分别有两个i,所以这两个i是不同的。


9143032-7b181ff78b1f7ad8.png
基本数据类型1.png

引用数据类型的参数传递
什么是引用数据类型?
在Java语言里面除了基本数据类型,其他的都是引用数据类型。当方法传递的参数是引用数据类型时会是什么样子呢?请看下面代码

定义一个Animal类

class Animal{

    private int age;

    public void setAge(int _age){
        age = _age;
    }

    public int getAge(){
        return age;
    }

}

定义一个Animal测试类,请问下面程序打印的结果是什么?

public class AnimalTest01{

    //方法传递的参数是引用数据类型Animal
    public static void m1(Animal a){
        int age = a.getAge();
        a.setAge(++age);
        System.out.println("m1中的age=" + a.getAge()); 
    }

    public static void main(String[] args){

        //1.创建Animal对象
        Animal a = new Animal();
        a.setAge(10);
        m1(a);

        System.out.println("main中的age" + a.getAge()); 

    }

}

上面打印的结果:

m1中的age=11
main中的age=11

两个打印的结果都是11,与基本数据类型的结果是不一样的,这是因为方法参数传过去的是对象的引用,m1方法里面的a和main方法里面的a所指向的是同一个Animal对象,所以当m1方法中修改了Animal对象中的age之后,main方法里面在获取age时,值也发生了改变。


9143032-760c110f050c90e7.png
引用类型1.png

猜你喜欢

转载自blog.csdn.net/weixin_33727510/article/details/86789822