zoukankan      html  css  js  c++  java
  • Java值传递和引用传递

    DFS所遇BUG

    进行一个DFS时,遇到了进行参数传递时直接传了ArrayList类型(C++习惯),但是发现DFS中所有ArrayList都指向了一个,看测试代码:

    import org.omg.PortableInterceptor.INACTIVE;
    
    import java.util.ArrayList;
    import java.util.Vector;
    
    /**
     * @Author Yuri
     * @Date 2020/11/26 13:51
     * @Version 1.0
     * @Description:
     */
    public class Test {
        static Integer n = 0;
    
        public static void dfs(int k, ArrayList<Integer> arrayList) {
    
            arrayList.add(k);
    //        ArrayList<Integer> arrayList = new ArrayList<Integer>(al);
    //        arrayList.add(k);
            if (k == 5) return;
            System.out.println(++n + ": " + arrayList);
            for (int i = 0; i < 3; i++) {
                dfs(k + 1, arrayList);
            }
        }
    
        public static void main(String[] args) {
            ArrayList<Integer> arrayList = new ArrayList<Integer>();
            dfs(1, new Ar
                rayList<Integer>());
        }
    }
    

    输出结果:

    QQ截图20201126180533

    总结原因是没搞清Java的值传递和引用传递。

    Java值传递和引用传递

    定义

    值传递:指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
    引用传递:是指在调用函数时将实际参数的地址直接传递到函数中(的形参),那么在函数中对参数所进行的修改,将影响到实际参数。
    指针传递:形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。(C++)

    Java各类型的传递规则

    boolean byte char short Int long float double
    Boolean Byte Character Short Integer Long Float Double
    • 八大基本类型都是值传递
    • 需要new的(ArrayList、Vector...)都是引用传递
    • String、包装类型虽然是引用传递,但是效果是值传递。
  • 相关阅读:
    jetbrains全家桶激活
    pytesseract
    CNN
    支持向量机SVM
    梯度下降法和随机梯度下降法
    多分类问题multicalss classification
    线性模型
    Noise,Error,wighted pocket Algorithm
    VC Dimension -衡量模型与样本的复杂度
    边界函数Bounding Function(成长函数的上界)
  • 原文地址:https://www.cnblogs.com/AkimotoAkira/p/14043835.html
Copyright © 2011-2022 走看看