欢迎访问宙启技术站
智能推送

Java函数中的参数传递方法详解

发布时间:2023-07-02 05:41:48

在Java中函数的参数传递有两种方式:按值传递和按引用传递。

按值传递是指将变量的实际值复制一份传递给函数,函数对这个值进行操作,不会改变原来的变量的值。这种方式适用于基本数据类型,如int、float、double等。例如:

public static void changeValue(int num) {
  num = 10;
}

public static void main(String[] args) {
  int num = 5;
  changeValue(num);
  System.out.println(num);  // 输出5
}

按引用传递是指将变量的地址传递给函数,函数根据这个地址可以直接改变原来变量的值。这种方式适用于引用类型,如数组、对象等。例如:

public static void changeArrayValue(int[] arr) {
  arr[0] = 10;
}

public static void main(String[] args) {
  int[] arr = {5};
  changeArrayValue(arr);
  System.out.println(arr[0]);  // 输出10
}

需要注意的是,虽然传递的是引用,但是函数内部对参数进行了重新赋值,并不会改变原来引用的地址。例如:

public static void changeReferenceValue(int[] arr) {
  arr = new int[]{10};
}

public static void main(String[] args) {
  int[] arr = {5};
  changeReferenceValue(arr);
  System.out.println(arr[0]);  // 输出5
}

此时函数内部创建了一个新的数组,修改的是新数组的值,并不会影响原来的数组。

需要注意的是,虽然String类是引用类型,但是在Java中的字符串是不可变的,因此对字符串的操作并不会改变原来字符串的值。例如:

public static void changeString(String str) {
  str = "world";
}

public static void main(String[] args) {
  String str = "hello";
  changeString(str);
  System.out.println(str);  // 输出hello
}

在函数changeString中,将str重新赋值为"world",并不会改变原来str的值,输出仍然是"hello"。

总结来说,Java中的函数参数传递分为按值传递和按引用传递两种方式。按值传递适用于基本数据类型,将变量的值复制一份传递给函数,函数对这个值进行操作不会改变原变量的值。按引用传递适用于引用类型,将变量的地址传递给函数,函数对这个地址可以直接改变原变量的值。然而,需要注意对引用类型的操作,可能会创建新的对象,不会改变原来的引用。