美文网首页
方法调用时参数传递的问题

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

作者: 张轻舟 | 来源:发表于2019-01-30 22:03 被阅读5次

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

    基本数据类型的参数传递

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


    基本数据类型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时,值也发生了改变。


    引用类型1.png

    相关文章

      网友评论

          本文标题:方法调用时参数传递的问题

          本文链接:https://www.haomeiwen.com/subject/opkhsqtx.html