java函数的参数传递
时间: 2023-05-28 18:01:54 浏览: 62
Java 函数的参数传递方式有两种:
1. 值传递:传递的是变量的值,即传递的是变量的副本。在函数内对变量的修改不会影响到实际变量的值。
2. 引用传递:传递的是变量的内存地址,即传递的是变量的引用。在函数内对变量的修改会影响到实际变量的值。
Java 中基本数据类型都是按值传递,而对象类型则是按引用传递。需要注意的是,虽然对象类型是按引用传递,但对象的值是不可修改的,只能修改对象的属性值。
相关问题
java函数与参数传递
在Java中,函数和参数传递的方式主要有以下几种:
1. 值传递(Pass by Value):函数调用时,将实参的值复制一份给形参,函数内部对形参的修改不会影响实参的值。这是Java中默认的参数传递方式。
示例代码:
```
public class Test {
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
swap(num1, num2);
System.out.println("num1 = " + num1 + ", num2 = " + num2);
}
public static void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
}
```
输出结果为:num1 = 10, num2 = 20,因为函数内部的交换操作只是交换了形参a和形参b的值,并不影响实参num1和num2的值。
2. 引用传递(Pass by Reference):函数调用时,将实参的引用传递给形参,形参和实参指向同一块内存地址,函数内部对形参的修改会影响实参的值。Java中没有显式支持引用传递的语法,但可以通过使用对象来实现引用传递。
示例代码:
```
public class Test {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
changeArr(arr);
System.out.println(Arrays.toString(arr));
}
public static void changeArr(int[] a) {
a[0] = 4;
a[1] = 5;
a[2] = 6;
}
}
```
输出结果为:[4, 5, 6],因为changeArr函数中对形参a的修改会直接影响实参arr的值。
3. 对象传递(Pass by Object):在Java中,对象也是引用类型,函数调用时,将实参对象的引用传递给形参对象,形参和实参指向同一块内存地址,函数内部对形参对象的修改会影响实参对象的值。
示例代码:
```
public class Test {
public static void main(String[] args) {
Person p = new Person("Tom");
changeName(p);
System.out.println(p.getName());
}
public static void changeName(Person person) {
person.setName("Jerry");
}
}
class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
```
输出结果为:Jerry,因为changeName函数中对形参person的修改会直接影响实参p所指向的Person对象的name属性。
java函数作为参数传递
在 Java 中,函数也可以作为参数进行传递。这种方式通常被称为函数式编程或高阶函数。下面是一个示例:
```java
public class Main {
public static void main(String[] args) {
String[] names = {"John", "Mary", "Alice", "Bob"};
printNames(names, name -> System.out.println(name));
}
public static void printNames(String[] names, NamePrinter printer) {
for (String name : names) {
printer.print(name);
}
}
}
interface NamePrinter {
void print(String name);
}
```
在这个示例中,我们定义了一个 `printNames` 函数,它接受一个字符串数组和一个 `NamePrinter` 函数作为参数。`NamePrinter` 是一个接口,它只有一个打印名称的方法。
在 `main` 函数中,我们创建了一个字符串数组,并将其传递给 `printNames` 函数。我们还定义了一个 Lambda 表达式作为 `NamePrinter` 参数,该表达式将每个名称打印到控制台上。
运行此程序将输出以下内容:
```
John
Mary
Alice
Bob
```