Java程序演示值传递


在编程中,函数通常需要传递参数才能被调用。调用函数有两种方法:第一种引用调用第二种值传递。本文将演示如何在Java中进行值传递。

值传递是一种方法,其中参数的值被复制到函数中,因此在函数内对该参数所做的任何更改都不会影响该函数作用域之外参数的原始值。

为了更详细地理解这些概念,我们需要理解用于描述函数参数类型的两个术语。它们是实际参数和形式参数。形式参数是在函数头部定义的,负责接收实际参数。实际参数是在函数调用期间“实际”传递给函数的值或变量。

不同方法

以下是演示值传递的不同方法:

使用值传递理解实际参数和形式参数

以下是演示值传递的步骤:

  • 定义一个方法compute(int p, int q),它接受两个整型参数pq。这些是形式参数。
  • 在方法中,返回pq的和。
  • 在主方法中,用值510分别初始化两个整数rs
  • 使用r和s作为参数调用compute方法,它们充当实际参数,并将结果存储在一个名为sum的变量中。
  • 打印sum的值,这将是r和s相加的结果。

示例

让我们来看一个例子来理解实际参数和形式参数。

public class Main {
   public static int compute(int p, int q) {
      // These 2 variables, p and q are the formal parameters
      return p+q;
   }
   public static void main(String[] args) {
      int r=5, s=10;
      int sum = compute(r, s); //r and s  here are actual parameters
      System.out.println("Sum = " + sum);
   }
}

输出

上述程序将产生以下输出:

Sum = 15

现在记住实际参数和形式参数的概念,需要注意的是,在值传递中,实际参数和形式参数在不同的内存位置创建,而在引用传递中,实际参数和形式参数在相同的内存位置创建,因此它们是同步的或实际上是“可修改的”。

使用基本数据类型演示值传递

以下是演示Java中值传递的步骤:

  • 定义一个方法modifyValue(int value),它接受一个整型参数value。
  • 在modifyValue内部,打印参数的初始值。
  • 通过添加10修改该值,并打印新值。
  • 在主方法中,用值5初始化一个整数a。
  • 打印a的初始值。
  • 调用modifyValue(a),将其作为参数传递。请注意,只传递a的副本。
  • 在函数调用之后再次打印a的值,以显示它保持不变。

示例

这是一个简单的例子,演示了Java中的值传递:

public class Main {
   static void modifyValue(int value) {
      System.out.println("The value of the variable inside of the function before any modifications is " + value);
   
      value = value + 10;
      System.out.println("The value of the variable inside of the function after adding 10 to it is " + value);
   }
   public static void main(String[] args) {
      int a = 5;
      System.out.println("The value of variable a, before calling the function is " + a);
   
      //invoke the function and pass the argument 
      modifyValue(a);
      System.out.println("The value of variable a, after calling the function is " + a);
   }
}

输出

上述程序将产生以下输出:

The value of variable a, before calling the function is 5
The value of the variable inside of the function before any modifications is 5
The value of the variable inside of the function after adding 10 to it is 15
The value of variable a, after calling the function is 5

在Java中,像int、float、char等基本数据类型通常使用值传递传递给函数,而对象作为引用传递给方法。为了证明这一点,我们将在下面看到另一个例子。在这里,我们将传递一个int(基本数据类型)和一个int数组(一个对象)。这也将证明值传递和引用传递可以在一次函数调用中同时进行。

同时使用值传递和引用传递

以下是演示Java中值传递的步骤:

  • 定义一个方法modifyValue(int value1, int[] value2),它接受一个整数value1和一个整型数组value2作为参数。
  • 在方法内部,打印value1value2[0]的初始值。
  • 通过添加10修改value1,并通过添加10更新value2[0]
  • 打印value1value2[0]的修改后的值。
  • 在主方法中,分别用值5和{5}初始化一个整数a和一个整型数组b。
  • 打印ab[0]的初始值。
  • 调用modifyValue(a, b),传递a和b作为参数。
  • 在函数调用之后打印ab[0]的值,以显示a保持不变(按值传递),而b[0]被修改(按引用传递)。

示例

这是一个简单的例子,演示了Java中的值传递:

public class Main {
   static void modifyValue(int value1, int[] value2) {
      System.out.println("The values of value1 and value2[0] are "+value1+" and "+value2[0]+" inside the function before any modifications");
      value1 = value1 + 10;
      value2[0] = value2[0] + 10;
      System.out.println("The values of value1 and value2[0] are "+value1+" and "+value2[0]+" inside the function after adding 10 to them");
   }
   public static void main(String[] args) {
      int a = 5;
      int[] b = {5};
      System.out.println("The value of variable a and b[0], before invoking the function is " + a+" and "+b[0]);
   
      // call the function and pass both parameters as a and b respectively
      modifyValue(a, b);
      System.out.println("The value of variable a and b[0], after invoking the function is " + a+" and "+b[0]);
   }
}

输出

上述程序将产生以下输出:

The value of variable a and b[0], before invoking the function is 5 and 5
The values of value1 and value2[0] are 5 and 5 inside the function before any modifications
The values of value1 and value2[0] are 15 and 15 inside the function after adding 10 to them
The value of variable a and b[0], after invoking the function is 5 and 15

在这种情况下,您可以看到在函数调用之前和之后,'a'的值保持不变,因为它按值传递。但是,作为对象的整型数组b的值在函数调用之后发生了更改,因为它按引用传递。因此,它证明了在Java中,对象按引用传递,而基本数据类型按值传递。

结论

因此,我们已经看到了值传递的演示,并了解到它是一种调用函数的技术,其中参数的原始值不会改变。此外,值传递仅限于基本数据类型,所有对象(如数组)都按引用传递。在值传递中,实际参数和形式参数的内存位置相同。在值传递中,函数内部所做的所有更改都只保留在函数的作用域内。值得注意的是,在一个函数调用中,可以同时实现值传递和引用传递,如上所示,其中一个整数和一个整型数组(一个对象)作为参数传递给函数。最后,在值传递中,只传递值的副本。

理解值传递和引用传递之间的区别对于编写高效可靠的代码至关重要。但是,总的来说,值传递更容易理解,并且不易出错,但在处理大型数据结构的场景中可能会产生意想不到的后果。

更新于:2024年11月11日

450 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告