黑马程序员技术交流社区
标题:
方法参数问题
[打印本页]
作者:
杨杨
时间:
2013-2-5 10:07
标题:
方法参数问题
代码求解释
public class ParamTest{
public static void main(String[] args) {
//Test1
double percent =10;
tipleValue(percent);
//Test2
Empoyee harry= new Empoyee("Harry",5000);
tripeSalary(harry);
Empoyee a =new Empoyee("Alice", 7000);
Empoyee b = new Empoyee("bod", 8000);
swap(a,b);
}
private static void swap(Empoyee a, Empoyee b) {//不能交换执行?????
Empoyee temp=a;
a=b;
b=temp;
}
private static void tripeSalary(Empoyee x) {//能改变 salary的值??
x.raiseSalary(200);
}
private static void tipleValue(double percent) {//不能改变percent 的值???
percent=3*percent;
}
}
class Empoyee{
private String name;
private double salary;
public Empoyee(String aname, double s) {
name=aname;
salary=s;
}
public String getName(){
return name;
}
public double getSalary(){
return salary;
}
public void raiseSalary(double byPercent){
double raise=salary*byPercent/100;
salary+=raise;
}
}
复制代码
作者:
刘凯
时间:
2013-2-5 10:38
1. private static void swap(Empoyee a, Empoyee b) {//不能交换执行?????
Empoyee temp=a;
a=b;
b=temp;
这句不太清楚楼主想表达什么, 所以就按我自己认为的说好了
Empoyee temp=a;
a=b;
b=temp;
1)如果
a=b;
Empoyee temp=a;
b=temp;
则a中的值被b覆盖,那么最后的b=temp; b得到的还是原值
2)如果
Empoyee temp=a;
b=temp;
a=b;
同1) b中的数值被a覆盖 a=b;后 a得到的也就是原来a的值
3)如果temp调用在其声明之前,必然不能通过编译,因为还没声明怎么能够调用。
2.
private static void tipleValue(double percent) {//不能改变percent 的值???
percent=3*percent;
}
这个方法中的
percent 只是该方法局部定义的一个变量,跟主函数的percent 是不同变量,存储在栈内存中,而该方法为void 没有返回值 所以该方法执行完以后该变量就在栈内存中死亡,没有任何意义。
3.而
private static void tripeSalary(Empoyee x) {//能改变 salary的值??
x.raiseSalary(200);
}
方法中,Empoyee x 声明的是一个harry这对象的指针
x.raiseSalary(200);这一句是改变该对象在堆内存中harry这个对象中的salary数值, 并保存在堆内存中 只要harry这个对象还在调用该对象的salary,则就是改后的值。
我是这么理解的 求指正
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2