精华内容
下载资源
问答
  • JAVA数组作为函数参数传递

    千次阅读 2020-04-05 12:43:23
    JAVA数组作为函数参数传递 JAVA数组作为函数参数传递: 在程序中,调用方法并且把数组的名称作为参数传递到方法中。 本质上是传递数组的地址值。 既然传递的是数组的地址,那么方法就可以通过数组的地址改变...

    JAVA中数组作为函数参数传递

    1. JAVA中数组作为函数参数传递:
      在程序中,调用方法并且把数组的名称作为参数传递到方法中。
      本质上是传递数组的地址值。
      既然传递的是数组的地址,那么方法就可以通过数组的地址改变内存中数组的内容。
      类似于C语言中调用函数传递数组的指针一样。可以在函数中通过指针改变数组的内容。
      所以在JAVA当中,数组为引用类型,可以把数组作为参数传递到方法中去改变数组。
    2. 例子:
    public static void main(String[] args) {
            int[] arr = {5,6,4,8,12,1,9,5};       
            sort(arr);
            for(int i:arr)
            System.out.print(i+" ");	//1 6 4 8 12 1 9 5 
          }
    
    	private static void sort(int[] a) {
    		a[0]=1;	
    	}
    
    展开全文
  • 数组作为参数传递 数组作为参数与基本类型是不一样的,基本类型不会对调用者中的变量造成任何影响,但数组不是,在函数内修改数组中的元素会修改调用者中的数组内容。看个例子: public static void reset(int[] arr...

    来源:Java编程的逻辑

    数组作为参数传递

    数组作为参数与基本类型是不一样的,基本类型不会对调用者中的变量造成任何影响,但数组不是,在函数内修改数组中的元素会修改调用者中的数组内容。看个例子:

    public static void reset(int[] arr){
        for(int i=0;i<arr.length;i++){
            arr[i] = i;
        }
    }
    
    public static void main(String[] args) {
        int[] arr = {10,20,30,40};
        reset(arr);
        for(int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }
    }
    

    在reset函数内给参数数组元素赋值,在main函数中数组arr的值也会变。

    原因:一个数组变量有两块空间,一块用于存储数组内容本身,另一块用于存储内容的位置,给数组变量赋值不会影响原有的数组内容本身,而只会让数组变量指向一个不同的数组内容空间。

    在上例中,函数参数中的数组变量arr和main函数中的数组变量arr存储的都是相同的位置,而数组内容本身只有一份数据,所以,在reset中修改数组元素内容和在main中修改是完全一样的。

    关于内存栈

    变量的生命周期:基本数据类型

    函数中的参数和函数内定义的变量,都分配在栈中,这些变量只有在函数被调用的时候才分配,而且在调用结束后就被释放了。

    变量的生命周期:数组和对象

    对于数组和对象类型,它们都有两块内存,一块存放实际的内容,一块存放实际内容的地址,实际的内容空间一般不是分配在栈上的,而是分配在堆中,但存放地址的空间是分配在栈上的。

    我们来看个例子,下面是代码:

    public class ArrayMax {
    
        public static int max(int min, int[] arr) {
            int max = min;
            for(int a : arr){
                if(a > max){
                    max = a;
                }
            }
            return max;
        }
    
        public static void main(String[] args) {
            int[] arr = new int[]{2,3,4};
            int ret = max(0, arr);
            System.out.println(ret);
        }
    }
    

    在程序执行到max函数的return语句之前的时候,内存中栈和堆的情况大概是这样的:
    在这里插入图片描述
    对于数组arr,在栈中存放的是实际内容的地址0x1000,存放地址的栈空间会随着入栈分配,出栈释放,但存放实际内容的堆空间不受影响。

    但说堆空间完全不受影响是不正确的,在这个例子中,当main函数执行结束,栈空间没有变量指向它的时候,Java系统会自动进行垃圾回收,从而释放这块空间。

    递归调用

    我们再通过栈的角度来理解一下递归函数的调用过程,代码如下:

    public static int factorial(int n) {
        if(n==0){
            return 1;
        }else{
            return n*factorial(n-1);
        }
    }
    
    public static void main(String[] args) {
        int ret = factorial(4);
        System.out.println(ret);
    }
    

    在factorial第一次被调用的时候,n是4,在执行到 n * factorial(n-1),即4 * factorial(3)之前的时候,栈的情况大概是:
    在这里插入图片描述
    注意返回值存储器是没有值的,在调用factorial(3)后,栈的情况变为了:
    在这里插入图片描述
    栈的深度增加了,返回值存储器依然为空,就这样,每递归调用一次,栈的深度就增加一层,每次调用都会分配对应的参数和局部变量,也都会保存调用的返回地址,在调用到n等于0的时候,栈的情况是:
    在这里插入图片描述
    这个时候,终于有返回值了,我们将factorial简写为f。
    f(0)的返回值为1,f(0)返回到f(1),f(1)执行1 * f(0),结果也是1,然 后返回到f(2),f(2)执行2 * f(1),结果是2,然后接着返回到f(3),f(3)执行3 * f(2),结果是6,然后返回到f(4),执行 4 * f(3),结果是24。

    以上就是递归函数的执行过程:函数代码虽然只有一份,但在执行的过程中,每调用一次,就会有一次入栈,生成一份不同的参数、局部变量和返回地址。

    展开全文
  • C语言与JAVA数组作为参数传递的区别 首先是C语言 #include <stdio.h> #include <stdlib.h> int main() { int arr[5]; int length = sizeof(arr) / sizeof(int); //求数组长度 printf("数组长度: %d...

    C语言与JAVA数组名作为参数传递的区别

    首先是C语言

    #include <stdio.h>
    #include <stdlib.h>
    int main() {
        int arr[5];
        int length = sizeof(arr) / sizeof(int);  //求数组长度
        printf("数组长度: %d\n数组长度: %d\n", length, length1(arr));
        system("pause");
        return 0;
    }
    //求数组长度
    int length1(int arr[]) {  
        return sizeof(arr) / sizeof(int);
    }
    

    运行结果:
    运行结果

    从运行结果可以看出,数组名作为参数传入函数时,不能通过sizeof求出数组长度,说明用数组名作参数传入函数时退化成为指向首元素的指针

    然后是java

    public class Array {
        public static void main(String[] args) {
            int array[]=new int[6];
            System.out.println("数组长度:"+array.length);
            
            System.out.println("数组长度:"+arrLength(array));
        }
        
        static int arrLength(int arr[]) {
            return arr.length;
        }
    }
    

    运行结果
    在这里插入图片描述

    java中,数组名作为参数传入方法时,可以正确求出数组长度,在传递时能正确传递数组的地址.

    展开全文
  • package Code411;//数组作为方法参数传递地址public class DodeArrayParam { public static void main(String[] args) { int[] array={1,2,3,4}; System.out.println(array);//地址值 printArray(array);/...
    package Code411;
    //数组作为方法参数—传递地址
    public class DodeArrayParam {
    public static void main(String[] args) {
    int[] array={1,2,3,4};
    System.out.println(array);//地址值
    printArray(array);//传递进去的就是array保存的地址值
    }
    /*
    三要素
    返回值类型:只是进行打印而已,不需要计算,也没有结果,用void
    方法名称:printArray
    参数列表:必须给我数组,我才能打印期中的元素。int[]array
    */
    public static void printArray(int[] array){
    for (int i = 0; i < array.length; i++) {
    System.out.println(array[i]);
    }
    }
    }
    ↓运行结果

    转载于:https://www.cnblogs.com/Ssinoo/p/10692653.html

    展开全文
  • 解决方案是json数组直接作为参数传给后台的时候会被转化为Object,而在java中得不到想要的list数据, 利用函数将object转换成string字符串再作为参数,在java端用request.getParameterMap();然后用JSONObject.fro
  • java 数组作为方法参数

    千次阅读 2019-12-02 10:30:55
    数组作为方法参数 例:定义方法,打印输出数组元素的值 ...数组作为方法参数,当传参的时候,传递的是数组的名字。而在方法中定义的数组名为arr; package com.javaTest; import java.util.Scanner; public...
  • 初学方法数组传值问题,不多废话,直接代码 方法的返回值都为空 所以在main方法中不会有返回值,最后的结果应该在控制台输出10和10 但是        这里还是涉及到java 的内存...
  • 主要介绍了Java数组传递及可变参数操作,结合实例形式详细分析了java数组参数传递与可变参数相关使用技巧,需要的朋友可以参考下
  • Java数组传递及可变参数

    万次阅读 多人点赞 2018-09-02 11:39:20
    方法可以操作传递和返回基本数据类型,但是方法中也可用来传递和返回数组。如果要向方法中传递一个数组,则方法的接收参数处必须是...而数组也是一种对象,当把数组作为参数传递给方法时,传递的实际上就是数组对...
  • 数组可以作为参数传递给方法。 public class Demo03 { public static void main(String[] args) { test01(new int[]{1,4,5,8,33}); } /** * @param array 数组作为参数 */ public static void test01(int...
  • int fun(char a[100]) { //do something return 1; } int fun(char a[]) { //do something return 1; } int fun(char *a) { //do something return 1; } //传递的都
  • JAVA数组参数

    千次阅读 2017-03-22 09:13:16
    可以将数组作为参数传递给方法或构造函数。传递给该方法的数组的类型必须是与形式参数类型兼容的赋值(即,形参和实参的数组类型要一样。 以下代码显示了如何将数组作为方法参数传递 - public class Main { public ...
  • 方法与数组参数传递 方法:完成某个功能的代码块。被{}括起来 在很多语言里都有函数的定义。 函数而在Java中函数被称为方法。 格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…){ ...
  • 数组可以作为方法的参数。 当调用方法的时候,想方法的小括号进行传参,传递进去的其实是数组的地址值
  • String和char数组参数传递

    千次阅读 2018-08-15 02:43:56
    这个就是String和char数组参数传递问题。 问题: String和char数组作为一个参数输入一个方法,经过这个方法后,两个类型的变量对应的内容是否有变化? 答案: String不变,char数组会变。 先看以下代码: ...
  • 本文主要讲述使用JNA模拟结构体并将结构体数组作为参数传递给对应的方法。 C语言结构体定义如下: [cpp]view plaincopy typedefstructRect { inttop; intbottom; intleft...
  • JAVA数组传递问题

    千次阅读 2019-05-12 15:01:43
    main方法的String数组参数,其实是暴露给程序运行者的,用于给程序传递一个数据信息. 方法参数的值传递机制之基本数据类型 方法参数的值传递机制(by value): 方法被调用时,方法里的参数是以值传递的方式传递...
  • 变长数组传递(c99) int n; int a[n];//变长数组见第零章 如果要使用变长参数函数应如下定义 int f(int n,int a[n]) { } 第一个参数的值确定了第二个参数的长度,这两个参数顺序不能改变。上例函数还有另一个...
  • java中的参数传递(只有值传递没有引用传递)

    万次阅读 多人点赞 2019-07-31 19:25:14
    Java中只有传值调用(值传递),没有传址调用(址传递或者引用传递)。所以在java方法中改变参数的值是不会改变原变量的值的,但为什么改变引用变量的属性值却可以呢?请看下面的解答。 java中的数据类型 Java中...
  • 我们访问数组元素的格式:数组名称【索引值】 索引值:就是一个int数字,代表数组当中元素的编号 索引值从0开始,一直到“数组的长度 - 1...我们使用一个数组作为方法参数的时候,是将名称当中的保存的地址值传递进...
  • java数组传递方法

    2019-10-14 17:02:49
    Java 使用值传递(pass by value)的方式将...从语义上来讲,最好的描述就是参数传递的共享信息,即方法中的数组和传递的数组是一样的。所以,如果改变方法中的数组,将会看到方法外的数组也变化了。 public class H...
  • Java--数组作为方法参数和返回值

    万次阅读 2018-10-11 22:58:09
    文章目录前言内容1. 数组作为方法参数2. 数组作为方法返回值4. 断点调试总结end 前言 ...数组作为方法参数传递,传递的参数是数组内存的地址。 public static void main(String[] args) { ...
  • 1 数组作为参数 我们可以将数组作为参数,传入到函数中,其实就像我们main函数中 public void main(String [] args){};就是用数组作为函数参数; 又如, [java] view plain copy public class ...
  • 以上这段代码,在方法弹栈后,对于传入的数组参数是没有任何修改的!!但是C语言,这样: foo(int a[]){ arr[0]=100; } C语言,数组和指针是一回事情!int a[] <=> int *a !! 所以调用过后,arr[0]的...
  • 数组可以作为方法的参数。 当调用方法的时候,向方法的小括号进行传参,传递进去的其实是数组的地址值。 */ public class Demo01ArrayParam { public static void main(String[] args) { int[] array = {10,20,...
  • JNA以结构体数组参数进行调用: Java代码 //////C++ //student结构体定义 typedefstruct { intage; charname[20]; }Student; //修改java对象的属性值 JNAAPIboolchangeObjs(S...
  • Java数组转List的三种方式及对比

    万次阅读 多人点赞 2018-03-18 00:10:04
    本文介绍Java数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 232,298
精华内容 92,919
关键字:

java数组作为参数传递

java 订阅