-
概述
现在常用常见的方法参数的传递方法我们可以划分为按值调用(call by value:表示方法接受的是调用者提供的值)、按引用调用(call by reference:表示方法接收的是调用者提供的变量地址),在最古老的高级语言Algol中也曾出现过按名调用(call by name)。
我们可以通过一个方法可以修改传递引用所对应的变量值,这里我们常见的是通过方法参数传递对象参数;但是我们不能通过一个方法对该传递值所调用所对应的变量值。我们应该要牢牢记住java语言中总是采用按值调用,也就是说方法得到的是多有参数值的一个拷贝,所以方法不能修改传递给他的任何参数变量的内容,即使方法参数中传递的是一个“对象”,这个对象并不是真正对象的本身而是对象的一个引用,然而这个应用本身也是一个值。



-
代码示例
package javabook;
class Employee {
private int salary;
private String name;
public Employee(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
}
package javabook;
public class EmployeeMain {
public static void main(String[] args){
System.out.println("传递的对象是一个基本的值类型");
int x1=5,x2=5;
// 通过返回值的形式实现了对变量的重新赋值,从而实现变量值得增加
x1=intadd(x1);
System.out.print(x1+" ");
add(x2);
System.out.println(x2+"\n");
System.out.println("传递的是对象,论证java是按值传递");
Employee tom=new Employee("Tom");
Employee joy=new Employee("Joy");
System.out.println("这里是进行swap之前两个对象变量的信息:");
System.out.println("tom"+tom.getName()+","+tom+" joy"+joy.getName()+","+joy+"\n");
swapEmployee(tom,joy);
System.out.println("这里是进行swap之后两个对象变量的信息:");
System.out.println("tom"+tom.getName()+","+tom+" joy"+joy.getName()+","+joy+"\n");
System.out.println("传递的是对象,论证可以通过方法来修改引用所对应的值:");
System.out.println("改变前的值:"+tom.getName());
tom.setName("Tom1");
System.out.println("改变后的值:"+tom.getName());
}
public static int intadd(int x){
x=x+5;
return x;
}
public static void add(int x){
x=x+5;
}
static void swapEmployee(Employee employee1, Employee employee2){
System.out.println("这里展示的是一个一个方法传递应用所对应的示例:");
System.out.println("这里表现的是交换之前的效果:");
System.out.println("employee1:"+employee1+" employee2:"+employee2);
Employee temp;
temp=employee1;
employee1=employee2;
employee2=temp;
System.out.println("这里表现的是交换后的效果:");
System.out.println("employee1:"+employee1+" employee2:"+employee2+"\n");
}
}
-
总结
- 一个方法不能修改一个基本数据类型的参树
- 一个方法可以改变一个对象参数的状态
- 一个方法不能让对象参数引用一个新对象
本文详细探讨了Java中参数传递的机制,包括按值调用和按引用调用的概念,解释了为什么Java总是采用按值调用,并通过代码示例展示了如何通过方法修改对象状态而不改变对象引用。
454

被折叠的 条评论
为什么被折叠?



