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

Java中的函数参数传递:讲解Java函数中传递参数的方式(值传递和引用传递)。

发布时间:2023-06-25 19:16:54

Java作为一门面向对象编程语言,函数是其核心特性之一。函数是程序中的一个独立单位,用于执行特定的任务或算法。在Java函数中,参数传递是一项非常重要的概念,它指的是在调用函数时将值传递给函数的方式。在Java中,参数传递有两种方式:值传递和引用传递。

1. 值传递

在Java中,所有的基本数据类型,如int, double, float, boolean等都是通过值传递来传递参数的。在值传递时,函数会获得实参的一个副本,而不是原始的实参本身。这意味着,如果在函数体内修改了传递参数的值,不会影响原始变量的值。

例如,考虑以下函数:

public static void change(int x) {
    x = 10;
}

在这个例子中,我们将一个int型变量x作为参数传递给函数change,然后在函数内部将x的值改为10。但是,这个改变只会在函数内部生效,函数外部的变量x的值仍然保持不变。

public static void main(String[] args) {
    int x = 5;
    change(x);
    System.out.println(x);
}

在上面的代码中,我们创建了一个名为x的变量,并将其初始化为5。然后,我们调用函数change,并将变量x作为参数传递给它。最后,我们打印变量x的值,我们可以看到输出结果为“5”,即变量x的值并没有发生改变。

2. 引用传递

在Java中,所有的对象类型都是通过引用传递来传递参数的。当我们将一个对象作为参数传递给函数时,实际上是将对象的引用传递给了函数。这意味着,函数可以直接访问和修改对象中的属性和方法,而不需要将整个对象复制一份。

例如,考虑以下函数:

public static void setName(Student s) {
    s.setName("Tom");
}

在这个例子中,我们将一个名为s的Student对象作为参数传递给函数setName。然后,在函数内部,我们调用对象s的setName方法,并将其名字设置为“Tom”。

public static void main(String[] args) {
    Student s = new Student("John");
    setName(s);
    System.out.println(s.getName());
}

在上面的代码中,我们创建了一个名为s的Student对象,并将其名字初始化为“John”。然后,我们调用函数setName,并将对象s作为参数传递给它。在函数内部,我们修改了对象s的名字,然后打印出对象s的名字。我们可以看到,输出结果为“Tom”,即对象s的名字发生了改变。

需要注意的是,当使用引用传递时,也可以修改对象中的属性值,但不能修改对象引用指向的对象。

public static void setAge(Student s) {
    s.setAge(18);
    s = new Student("Tom");
}

在这个例子中,我们首先将对象s的年龄改为18,然后将s重定向到一个新的Student对象。但是,当我们打印出对象s的名字时,输出结果仍然为“Tom”。

public static void main(String[] args) {
    Student s = new Student("John");
    setAge(s);
    System.out.println(s.getName());
}

在上面的代码中,我们调用函数setAge,并将对象s作为参数传递给它。在函数内部,我们首先将对象s的年龄改为18,然后将s重定向到一个新的Student对象。最后,我们打印对象s的名字,可以看到输出结果仍然为“John”,而不是“Tom”。

总结:

Java中的参数传递有两种方式,即值传递和引用传递。值传递用于传递基本数据类型的值,而引用传递用于传递对象类型的引用。在Java中,所有的对象类型都是以引用的方式传递的,这意味着函数可以通过引用修改对象中的属性和方法,而不需要将整个对象复制一份。需要注意的是,在函数内部重定向对象引用时,不会影响外部的对象引用。