zoukankan      html  css  js  c++  java
  • 数组作为函数参数时的传递问题

    之前,一直认为将数组用于函数传递,函数内对数组的改变也会影响调用函数外的该数组,事实也是如此。但是,实际运用中可能会犯一个错误。

    示例代码如下:

    public class test {
        public static void main(String[] args){
            int[] array = {1,1};
            tt1(array);
            tt2(array);
            System.out.println();
        }
        public static void tt1(int[] array){
            array[0]=array[0]+1;
            int[] a={array[0],array[1],0};
            array=a;
            printArray(array);
        }
        public static void tt2(int[] array){
            array[1]=array[1]+1;
            printArray(array);
        }
        //打印数组
        public static void printArray(int[] array){
            String s="[";
            for(int i=0;i<array.length;i++){
                s=s+" "+array[i];
            }
            s=s+"]";
            System.out.println(s);
        }
    }
    输出:
    [2 1 0]
    [2 2]

    上面代码中,初始数组array={1,1},在tt1函数中先改变为array={2,1},再重新指向另一个新的数组。此时,tt1内的array={2,1,0}。执行完tt1后,开始执行tt2,这时发现array={2,1},而不是{2,1,0},执行完tt2后,tt2内的array={2,2}。

    这时,我们发现,当在函数内将数组变量指向新的数组时,原来函数外的数组并不该变。这是因为函数的参数传递的是数组的引用,所以在函数内对数组的元素做操作时,函数外的数组也会改变。但如果在函数内将数组变量指向新的数组,则函数内的数组变量不再指向函数外的数组区域。

  • 相关阅读:
    JQuery实现页面跳转
    CSS中让背景图片居中且不平铺
    C#后台将string="23.00"转换成int类型
    BootStrap的一些基本语法
    CSS实现文字阴影的效果
    BootStrap自定义轮播图播放速度
    BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
    C#常用快捷键
    jQuery hover() 方法
    鼠标移动有尾巴
  • 原文地址:https://www.cnblogs.com/wuchaodzxx/p/6638659.html
Copyright © 2011-2022 走看看