Java中的参数传递到函数的例子
在Java中,参数传递是指在调用函数时将数据值从一个地方传递到另一个地方。Java函数的参数可以是基本数据类型,也可以是对象。
在函数调用时,实参的值会被复制给函数中的形参,函数使用的是形参的值而不是实参的值。如果实参是一个基本数据类型,那么函数对其进行的操作不会影响到实参的值。但如果实参是一个对象,那么函数中对对象进行的操作有可能改变对象的属性值。
下面是一个Java中的参数传递的例子:
public class Example {
public static void main(String[] args) {
int a = 10;
int b = 20;
swap(a, b);
System.out.println("a = " + a + ", b = " + b);
}
public static void swap(int x, int y) {
int temp = x;
x = y;
y = temp;
}
}
在上面的例子中,我们定义了一个“swap”函数,这个函数接收两个参数并将它们进行交换。在主函数中,我们定义了两个整型变量a和b,然后调用swap函数将它们进行交换,并输出结果。
但是,我们会发现程序输出的结果与我们期望的结果不符,即输出a = 10,b = 20,而我们期望的是输出a = 20,b = 10。
这是因为在Java中,函数的参数传递是值传递。当我们调用swap函数时,实参a和b的值被复制给了形参x和y,函数在交换x和y的值后,也只是交换了它们所指向的内存中的值,而并不会影响到实参a和b的值。
如果我们想实现交换a和b的值,可以将a和b作为一个数组的元素,然后将数组传递给swap函数,如:
public class Example {
public static void main(String[] args) {
int[] arr = {10, 20};
swap(arr);
System.out.println("a = " + arr[0] + ", b = " + arr[1]);
}
public static void swap(int[] arr) {
int temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
}
在这个例子中,我们将a和b放入一个数组中,然后将这个数组传递给swap函数,函数中对数组进行的操作会直接改变数组中a和b的值,从而实现了交换。
除了基本数据类型和数组,Java中还有对象。在Java中,对象也是通过值传递的方式进行传递的,但是因为对象变量的值实际上是一个引用,所以我们可以通过对象引用来改变对象的属性,从而影响到对象本身。
考虑下面的例子:
public 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;
}
}
public class Example {
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");
}
}
在这个例子中,我们定义了一个Person类,它有一个String类型的属性name,并且有一个修改属性name的方法setName和一个获取属性name的方法getName。
在主函数中,我们创建了一个Person对象p,并将其名字设为"Tom"。然后我们调用changeName函数,将这个Person对象传递给它。在changeName函数中,我们调用了Person对象的setName方法,将其名字修改为"Jerry"。
最后在主函数中输出Person对象的名字,可以发现名字已经被修改成了"Jerry"。这是因为我们在changeName函数中修改了Person对象的属性,这个修改是直接改变了这个对象的状态,所以在主函数中输出这个对象的属性值时,它已经被修改为了"Jerry"。
综上所述,Java中的参数传递是通过值传递的方式进行的。函数对基本数据类型的参数进行的操作不会影响到实参的值,但对对象的操作有可能会改变对象的属性值。实参被复制后,函数中对形参的操作不会影响到实参的值,但是对对象来说,形参和实参引用的是同一个对象,所以函数中对对象的操作会直接影响到实参。
