• Java 函数传参


    Java 函数传参

    仅作为个人看法

    首先声明一下, 在java中函数传参是值传递, 不是引用传递. 要弄清楚这个问题之前要先弄清楚什么是值传递,什么是引用传递.

    函数传参有两种方式

    值传递 (pass by value): 是指在调用函数时将实际参数复制一份传递到函数中, 这样在函数中如果参数进行修改,将不会影响到实际参数 .

    引用传递 (pass by reference): 是指在调用函数时将实际参数的地址直接传递到函数中, 这样在函数如果对参数进行修改, 将影响实际参数


    #传递基本类型变量
        @Test
        public void testParam(){
            int i = 10;
            pass(10);
            System.out.println(i); //10
        }
        public static void pass(int i){
            i=i+1;
        }
    
    这里将 `int i = 10` 复制一份, 然后将复制后的基本变量传到函数中, 在函数中对基本变量修改, 因为是两个独立的变量, 所以函数中修改值并不会对实际的参数的值造成影响.
    

    '为复制的参数


    #传递引用类型变量
        @Test
        public void testParam(){
            User user = new User("zs", 1);
            pass(user);
            System.out.println(user);
        }
        public static void pass(User u){
            u.setUsername("张三");
        }
    

    这里的new User()new User() ' 都是引用变量, 虽然两个引用变量的地址不同, 但是引用的同一个堆内存中的User, 所以方法中修改对象, 外部也会变


    #那么为什么java传递引用类型就是值传递呢?

    请看下一个例子

        @Test
        public void testParam(){
            String a="abc";
            pass(a);
            System.out.println(a);
        }
        public static void pass(String a){
            a = "ABC";
        }
    

    加入是引用传递的话传的是一个地址, 那么在函数中修改值的话, 那因该输出的结果是"ABC"

    但是呢 结果却是 "abc"

    函数运行完后a' 变量指向了 ABC, 那么就与实际参数无关了, 而方法执行完就出栈了

  • 相关阅读:
    java——方法
    java——继承与多态——继承001
    java——继承与多态——接口001
    java——数组01
    java——数组03
    Java——对象和类—封装001
    java——静态static关键字001
    一篇关于自监督的论文Selfsupervised Visual Feature Learning with Deep Neural Networks: A Survey
    linux安装rclone以及一些常用的命令
    风格迁移网络(vgg19提取特征,gram矩阵提取风格特征)
  • 原文地址:https://www.cnblogs.com/kikochz/p/13358266.html
Copyright © 2020-2023  润新知