zoukankan      html  css  js  c++  java
  • 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;
    }

     

  • 相关阅读:
    POJ-2378 Tree Cutting
    ZOJ-3870 Team Formation
    POJ-1741 Tree (树上点分治)
    POJ-3107 Godfather
    HDU-3586 Information Disturbing(树形DP+删边)
    POJ 2796 (单调栈 + 前缀和)
    POJ 3250(单调栈)
    ATCoder 116 D (思维+贪心+栈)
    POJ2528 (离散化+线段树)
    HDU 2795(思维+线段树)
  • 原文地址:https://www.cnblogs.com/douyunpeng/p/13420048.html
Copyright © 2011-2022 走看看