4.4 参数传递
- 基本数据类型参数的传值
- 引用类型参数的传值
一:基本数据类型参数的传值
比如方法f
int f(int a){
return a;
}
当方法被调用时,如果方法有参数,参数必须要实例化,即参数变量要有具体的值,如对象a调用方法f
a.f(1);
注意:对于基本数据类型的参数,向该参数传递的值的级别不可以高于该参数的级别
二:引用类型参数的传值
当参数是引用类型时,“传值”传递的是变量中存放的“引用”,而不是变量所引起的实体。
对于两个同类型的引用型变量,如果具有同样的引用,就会有同样的实体
改变参数变量所引起的实体,就会导致原变量的实体发生同样的变化
改变参数中存放的“引用”,不会影响其传值的变量中存放的“引用”
比如:
package cn.test;
public class Circle {
double radius; //半径
Circle(double r){ //带参数的构造方法
radius=r;
}
double getRadius(){ //获得半径
return radius;
}
void setRadius(double r){ //修改半径
radius=r;
}
}
package cn.test;
public class Circular {
Circle bottom;
double height;
//将Circle类的实例引用传递给bottom,这样bottom可以调用Circle的方法了,比如获取半径的方法
Circular(Circle c,double h){
bottom=c;
height=h;
}
double getBottomRadius(){ //获得底半径
return bottom.getRadius();
}
public void setBottomRadius(double r){ //修改底半径
bottom.setRadius(r);
}
}
package cn.test;
public class maintest {
public static void main(String []args){
//在分配内存后,执行构造方法的语句,对成员变量进行初始化操作,这时候半径就是10.0了(double类型)
//当然了,如果构造方法是无参数的,也没有定义有参数的构造方法,那么半径默认是0.0
Circle circle=new Circle(10);
System.out.println(circle);
System.out.println(circle.getRadius());
Circular circular=new Circular(circle,10);
System.out.println(circular);
System.out.println(circular.getBottomRadius());
// bottom和circle引用一样,所以有同样的实体
System.out.println(circular.bottom);
double r=8888;
// 改变参数变量所引起的实体,就会导致原变量的实体发生同样的变化
circular.setBottomRadius(r);
System.out.println(circle.getRadius());
System.out.println(circular.getBottomRadius());
// 引用发生变化
circle=new Circle(20);
System.out.println(circle);
// 获得了新的实体,radius值为20
System.out.println(circle.getRadius());
// 但是circle先前的实体不被释放,因为这实体还是circular的bottom的实体
System.out.println(circular.getBottomRadius());
}
}
还没有评论,来说两句吧...