举报投诉联系我们 手机版 热门标签 鳄鱼CMS
您的位置:鳄鱼CMS > java数组参数传值 Java 数组参数

java数组参数传值 Java 数组参数

2023-03-10 13:31 Java教程

java数组参数传值 Java 数组参数

java数组参数传值

Java数组参数传值是指在Java中,当一个方法被调用时,实参会被复制一份给形参,这样就会产生两份不同的内存空间,实参和形参之间的值是独立的。

Java中的数组也是一样,当一个数组作为参数传递到方法中时,它也会被复制一份给形参。但是由于数组本身是引用类型,所以实际上复制的是引用而不是整个数组。因此,实参和形参拥有相同的引用地址(即拥有相同的内存地址)。

public class Test { 
    public static void main(String[] args) { 
        int[] arr = {1,2,3}; 

        System.out.println("Before change:"); 

        for (int i = 0; i < arr.length; i++) { 
            System.out.print(arr[i] + " "); 
        } 

        change(arr); // 这里将arr作为参数传递到change()方法中

        System.out.println("\nAfter change:"); 

        for (int i = 0; i < arr.length; i++) { 
            System.out.print(arr[i] + " "); 
        }  
    }  

    public static void change(int[] arr) { // 定义change()方法,将arr作为参数传入  

        for (int i = 0; i < arr.length; i++) {  
            if (arr[i] % 2 == 0) {  
                arr[i] *= 2;  
            } else {  
                arr[i] *= 3;  
            }  
        }  

    }  														     // 由于arr作为引用传入change()方法中,所以change()方法对arr进行修改后(即修改了内存地址中的内容);main()方法中的arr也随之改变。     // 因此main()方法中打印出来的arr已经被修改过了。     // 这就说明了Java中使用引用来传递数组时实际上是将引用复制一份给形参。     // 因此实际上实参和形参之间共享同一片内存区域。     // 此时改动其中一者都会对其余者造成影响。      

Java 数组参数

Java数据类型教程 - Java数组参数

数组参数

我们可以将数组作为参数传递给方法或构造函数。

我们传递给该方法的数组的类型必须是与形式参数类型兼容的赋值。

以下代码显示了如何将Array作为方法参数传递

public class Main {
  public static void main(String[] args) {
    int[] num = { 1, 2 };

    System.out.println("Before  swap");
    System.out.println("#1: " + num[0]);
    System.out.println("#2: " + num[1]);

    swap(num);

    System.out.println("After  swap");
    System.out.println("#1: " + num[0]);
    System.out.println("#2: " + num[1]);
  }
  public static void swap(int[] source) {
    if (source != null && source.length == 2) {
      // Swap the first and the second elements
      int temp = source[0];
      source[0] = source[1];
      source[1] = temp;
    }
  }
}

上面的代码生成以下结果。


数组参数参考

因为数组是一个对象,所以它的引用的副本被传递给一个方法。

如果方法更改数组参数,实际参数不受影响。

import java.util.Arrays;

public class Main {
  public static void main(String[] args) {
    int[] origNum = { 1, 2, 3 };
    System.out.println("Before method  call:" + Arrays.toString(origNum));

    // Pass the array to the method
    tryArrayChange(origNum);

    System.out.println("After method  call:" + Arrays.toString(origNum));
  }

  public static void tryArrayChange(int[] num) {
    System.out.println("Inside method-1:" + Arrays.toString(num));
    // Create and store a new int array in num
    num = new int[] { 10, 20 };

    System.out.println("Inside method?2:" + Arrays.toString(num));
  }
}

上面的代码生成以下结果。


数组参数的元素

存储在数组参数的元素中的值可以在方法中始终更改。

以下代码显示了如何更改方法中的数组参数的元素。

import java.util.Arrays;

public class Main {
  public static void main(String[] args) {
    int[] origNum = { 1, 2, 3 };
    String[] origNames = { "Java", "SQL" };
    System.out.println("Before method  call, origNum:"
        + Arrays.toString(origNum));
    System.out.println("Before method  call, origNames:"
        + Arrays.toString(origNames));

    // Call methods passing the arrays 
    tryElementChange(origNum);
    tryElementChange(origNames);

    System.out.println("After method  call, origNum:"
        + Arrays.toString(origNum));
    System.out.println("After method  call, origNames:"
        + Arrays.toString(origNames));
  }

  public static void tryElementChange(int[] num) {
    if (num != null && num.length > 0) {
      num[0] = -1;
    }
  }

  public static void tryElementChange(String[] names) {
    if (names != null && names.length > 0) {
      names[0] = "T";
    }
  }
}

上面的代码生成以下结果。

例子

以下代码显示如何更改对象数组元素。

class Item {
  private double price;
  private String name;

  public Item(String name, double initialPrice) {
    this.name = name;
    this.price = initialPrice;
  }

  public double getPrice() {
    return this.price;
  }

  public void setPrice(double newPrice) {
    this.price = newPrice;
  }

  public String toString() {
    return "[" + this.name + ", " + this.price + "]";
  }
}

public class Main {
  public static void main(String[] args) {
    Item[] myItems = { new Item("Pen", 2.11), new Item("Pencil", 0.10) };
    System.out.println("Before method  call  #1:" + myItems[0]);
    System.out.println("Before method  call  #2:" + myItems[1]);

    // Call the method passing the array of Item
    tryStateChange(myItems);

    System.out.println("After method  call  #1:" + myItems[0]);
    System.out.println("After method  call  #2:" + myItems[1]);
  }

  public static void tryStateChange(Item[] allItems) {
    if (allItems != null && allItems.length > 0) {
      allItems[0].setPrice(0.38);
    }
  }
}

上面的代码生成以下结果。

阅读全文
以上是鳄鱼CMS为你收集整理的java数组参数传值 Java 数组参数全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 鳄鱼CMS eyucms.com 版权所有 联系我们