在我们讨论 “Java中参数传递的类型” 这个问题之前,我们首先需要对参数传递的类型做一些了解。
众所周知,Java语言的许多概念是传承自C++的,因此我们需要先对C++的参数传递类型做一些了解。C++中参数的传递有三种,分别是:
1、传值
具体操作:在调用函数/方法时,会创建形参列表中的相应对象,并将实参的各项值,复制给新创建的形参。
下面贴一段代码,并进行分析:
#include
using namespacestd;//成绩类:内含语、数、英 三科成绩
classScore{public:doublechinese;doublemath;doubleenglish;//构造方法
Score(){}
Score(double chinese,double math,doubleenglish){this->chinese =chinese;this->math =math;this->english =english;
}
};//学生类:内含年龄、成绩
classStudent{public://构造函数
Student(intage,Score score){this->age =age;this->score =score;
}void setAge(intage){this->age =age;
}voidsetScore(Score score){this->score =score;
}//信息概览
voidshow(){
cout<
}private:intage;
Score score;
};voidchangeStudent(Student student){
student.setAge(99);
}intmain()
{//创建一个学生
Score score(88,90,95);
Student student(17,score);//展示学生信息
student.show();//调用修改函数
changeStudent(student);//再次展示学生信息
student.show();return 0;
}
从执行结果可以看到,两次show()展示的信息是一样的。 这是因为在调用changeStudent()函数时,传的是值 changeStudent()函数会新创建一个形参对象,然后把实参的各个属性拷贝到形参中。
(如果在changeStudent函数的头部和底部分别调用student.show方法,就会发现函数内的student的值确实修改了,不过这个student是changeStudent函数临时创建的,与主函数中的student除了值相同,没有一分钱的关系,他们的地址并不相同 —— 换言之,他们并不是一个对象 这个临时创建的student会在函数执行完后,自动销毁)
2、传指针
具体操作:在调用函数/方法时,会创建一个形参指针,并将实参指针的地址,拷贝给实参指针。 (看描述就可以看出来,传指针其实就是传值)
#include
using namespacestd;//成绩类:内含语、数、英 三科成绩
classScore{public:doublechinese;doublemath;doubleenglish;//构造方法
Score(){}
Score(double chinese,double math,doubleenglish){this->chinese =chinese;this->math =math;this->english =english;
}
};//学生类:内含年龄、成绩
classStudent{public://构造函数
Student(intage,Score score){this->age =age;this->score =score;
}void setAge(intage){this->age =age;
}voidsetScore(Score score){this->score =score;
}//信息概览
voidshow(){
cout<
}private:intage;
Score score;
};voidchangeStudent(Student *pStudent){
pStudent->setAge(99);
}intmain()
{//创建一个学生
Score score(88,90,95);
Student student(17,score);
//创建一个指针
Student *pStudent = &student;//展示学生信息
student.show();//调用修改函数
changeStudent(pStudent);//再次展示学生信息
student.show();return 0;
}
3、传引用
首先,比较确定的点就是