java语言总是采用值传递的方式,也就是说,方法得到的是所有参数的一个副本,所以方法不能改变传递给它的任何参数的内容。改变的只是副本的值,
1.基本类型。
public static void raise(double x){ //试图让工资提升三倍
x=3*x;
}
double percent =10;
harry.raise(percent );
以上的代码执行了一下的三个步骤:
1)。在栈中,percent 的值拷贝给x
2)。执行raise方法,x的值被提升了3倍,percent 值不变
3)。方法执行完之后x不再应用;
2.引用类型
harry = new Harry();
raseSalary(harry);
public static void raseSalary(Harry x){
x.raise(200);
}
以上代码执行了三个步骤:
1)。x被初始化为harry的一个副本,存放在栈中,和harry指向同一个对象
2)。raise方法之后,x和harry同时指向的那个对象的薪资提升了200%
3)。方法结束之后x值不再应用,而harry引用的对象薪资是提升后的值。
由此是否可以说明以下几点:
1.java是引用调用呢?不是,java传递的一直都是副本,而不是引用本身。
2.一个方法不能修改一个基本数据类型的参数
3.一个方法可以改变一个对象参数的状态
4.一个方法不能实现让一个对象参数引用一个新的对象