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

Java函数传参必学——值传递与引用传递的区别;

发布时间:2023-06-18 14:45:00

Java是一种非常强大的面向对象的编程语言,它的特点之一是具有很高的代码复用性。在Java编程中,函数是非常重要的一部分,可谓是Java代码的基本组成部分之一。在Java中,函数传参是必不可少的,但是函数传参时需要注意值传递与引用传递的区别,本文将详细介绍这一问题。

一、值传递

值传递就是将实参的值复制一份给形参,在函数中对形参的修改不会影响实参的值。Java的基本数据类型(byte、short、int、long、float、double、boolean、char)都是采用值传递的方式。例如:

public class ValueTransferExample {
   public static void main(String[] args) {
      System.out.println("调用swap方法前:");
      int a = 10;
      int b = 20;
      System.out.println("a的值为:" + a + ",b的值为:" + b);
      swap(a, b);
      System.out.println("调用swap方法后:");
      System.out.println("a的值为:" + a + ",b的值为:" + b);
   }

   public static void swap(int x, int y) {
      int temp = x;
      x = y;
      y = temp;
   }
}

运行结果为:

调用swap方法前:
a的值为:10,b的值为:20
调用swap方法后:
a的值为:10,b的值为:20

从结果中可以看出,函数中对形参x、y的修改,并没有影响到实参a、b的值。

二、引用传递

引用传递是指将实参的地址复制一份给形参,形参和实参同时指向同一个对象,函数中对形参的修改会影响到实参的值。Java的所有引用数据类型(数组、类、接口)都是采用引用传递的方式。

例如:

class Exchange {
    int num1;
    int num2;

    Exchange(int num1, int num2) {
        this.num1 = num1;
        this.num2 = num2;
    }
}

public class ReferenceTransferExample {
    public static void main(String[] args) {
        System.out.println("调用swap方法前:");
        Exchange exchange = new Exchange(10,20);
        System.out.println("exchange.num1的值为:" + exchange.num1 + ",exchange.num2的值为:" + exchange.num2);
        swap(exchange);
        System.out.println("调用swap方法后:");
        System.out.println("exchange.num1的值为:" + exchange.num1 + ",exchange.num2的值为:" + exchange.num2);
    }

    public static void swap(Exchange exchange) {
        int temp = exchange.num1;
        exchange.num1 = exchange.num2;
        exchange.num2 = temp;
    }
}

运行结果为:

调用swap方法前:
exchange.num1的值为:10,exchange.num2的值为:20
调用swap方法后:
exchange.num1的值为:20,exchange.num2的值为:10

从结果中可以看出,函数中对形参exchange的修改,影响了实参的值。

三、区别总结

值传递与引用传递的区别主要表现在以下几个方面:

1. 参数类型: 基本数据类型采用值传递,引用数据类型采用引用传递。

2. 修改实参: 值传递不能修改实参的值,引用传递可以修改实参的值。

3. 修改形参: 值传递可以修改形参的值,但不会影响实参的值;引用传递修改形参的值会影响实参的值。

四、结论

在Java编程中,函数传参时需要注意值传递与引用传递的区别。如果需要修改实参的值,应该采用引用传递;如果不需要修改实参的值,应该采用值传递。在Java编程中,我们通常优先使用引用传递,这样可以节省内存空间,提高程序的效率。同时也需要注意安全性,避免修改实参时出现不必要的错误。