面向对象_方法参数传递的问题_引用传递_值传递

基本数据类型的参数传递

先来看看这段代码,m1方法中的i和main方法里面的i的值分别是多少?

public class ParamTest01{

    publicstaticvoidm1(inti){

        i++;

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

    }

    publicstaticvoidmain(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是不同的。


引用数据类型的参数传递

什么是引用数据类型?

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

定义一个Animal类

class Animal{

    private int age;

    publicvoidsetAge(int_age){

        age = _age;

    }

    publicintgetAge(){

        return age;

    }

}

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

public class AnimalTest01{

    //方法传递的参数是引用数据类型Animal    publicstaticvoidm1(Animal a){

        int age = a.getAge();

        a.setAge(++age);

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

    }

    publicstaticvoidmain(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时,值也发生了改变。

Animal a = new Animal();

        a.setAge(10);

        m1(a);

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

    }

}

你可能感兴趣的:(面向对象_方法参数传递的问题_引用传递_值传递)