关于方法参数
1.程序设计语言的参数传递分为按值调用:方法接收的是调用者提供的值;
按引用调用 :方法接收的是调用者提供的变量地址
2. 值得注意的事情:java设计语言总是按值调用 ,也就是方法得到的是参数值得一个拷贝,方法不能修改
传递给它的任何参数变量的内容
3.常见情况:方法参数有两种类型 基本数据类型和对象引用
基本数据类型 : 方法调用将不会改变基本数据类型的参数
对象引用 : 方法调用会改变对象参数的状态 (原理:方法依然得到的是对象引用的拷贝,而这个对象引用的
拷贝值仍是对象引用,并与其所拷贝的模板对象引用指向同一个对象)
案例 :
public class Employee {
private String str ;
public Employee(String str){
this.str=str ;
}
public void getStr(){
System.out.println(str);
}
}
public class SwapWay {
public void swap(Employee x , Employee y){
Employee temp = x ;
x = y ;
y = temp ;
//x是a值得拷贝,y是b值得拷贝
System.out.println("方法参数x,y .......");
x.getStr();
y.getStr();
}
public static void main(String[] args) {
Employee a = new Employee("I am A .") ;
Employee b = new Employee("I am B .") ;
a.getStr();
b.getStr();
System.out.println("............");
new SwapWay().swap(a,b);
System.out.println(" 两个对象内部情况............");
a.getStr();
b.getStr();
}
}
结论:不难看出a , b 对象在交换方法执行后内部的数据并没有变化,但作为方法参数的x,y交换了
也就是说a , b 两个对象引用所指向对象地址并没有交换, x , y 的交换说明这里的方法参数拿到的
实际上是a , b 对象引用的拷贝值 。
也就意味着一个方法不能让对象参数引用一个新的对象
public void problemA(Employee a ,Employee b){
a = b ;
}
public static void main(String[] args) {
Employee a = new Employee("I am A .") ;
Employee b = new Employee("I am B .") ;
a.getStr();
System.out.println("............");
new SwapWay().problemA(a, b);
System.out.println(" 两个对象内部情况............");
a.getStr();
}