2020年8月2日 方法的传递机制(参数是基本数据类型、参数是引用数据类型)

/*
方法的参数传递机制:
    实参-->形参

(1)形参是基本数据类型
    实参赋值给形参的是数据值,形参值的修改不影响实参,因为实参是“copy,复制”了一份数据值给形参

*/
class Test02_PassParamValue{
    public static void main(String[] args){
        int x = 1;
        int y = 2;
        //本类同级别的方法调用
        swap(x,y);
        
        System.out.println("x = " + x + ",y = " + y);//形参是基本数据类型
    }
    //public static修饰符
    public static void swap(int a,int b){
        System.out.println("a = " + a + ",b = " + b);
        int temp = a;
        a = b;
        b = temp;
        System.out.println("a = " + a + ",b = " + b);
    }
}

//输出结果:
a=1 b=2
a=2 b=1
x=1 y=2


/*
方法的参数传递机制:
    实参-->形参


(2)形参是引用数据类型    
    实参赋值给形参的是对象的地址值,如果形参修改了对象的属性值,那么实参对象的属性值也会修改。
*/
class Test02_PassParamValue_2{
    public static void main(String[] args){
        Circle yuan = new Circle();
        yuan.radius = 1.0;
        
        doubleRadius(yuan);
        
        System.out.println("半径:" + yuan.radius);
    }
    //方法的功能:可以把c这个圆对象的半径,变为原来的2倍
    public static void doubleRadius(Circle c){//形参是引用数据类型
        c.radius *= 2;
    }
    
}
class Circle{
    double radius;
}
//输出结果:
半径:2.0
/*
陷阱:
    当形参是引用数据类型,实参给形参地址值之后,
    形参修改了地址值,那么和实参就无关了
*/
class Test02_PassParamValue_Error{
    public static void main(String[] args){
        Circle yuan = new Circle();//声明变量
        yuan.radius = 1.0;//给变量属性赋值
        
        doubleRadius(yuan);//调用方法
        
        System.out.println("半径:" + yuan.radius);//打印变量的属性值
    }
    //方法的功能:可以把c这个圆对象的半径,变为原来的2倍
    public static void doubleRadius(Circle c){
        c = new Circle();//加了一句代码  修改了形参c中存储的地址值,即c指向新对象了
        c.radius *= 2;
    }
    
}
class Circle{
    double radius;
}

 

原文地址:https://www.cnblogs.com/douyunpeng/p/13420048.html