A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨杨 中级黑马   /  2013-2-5 10:07  /  1271 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码求解释
  1. public  class ParamTest{
  2.         public static void main(String[] args) {
  3.                 //Test1
  4.                 double percent =10;
  5.                 tipleValue(percent);
  6.                 //Test2
  7.                 Empoyee harry= new Empoyee("Harry",5000);
  8.                 tripeSalary(harry);
  9.                 Empoyee a =new Empoyee("Alice", 7000);
  10.                 Empoyee b = new Empoyee("bod", 8000);
  11.                 swap(a,b);
  12.         }

  13.         private static void swap(Empoyee a, Empoyee b) {//不能交换执行?????
  14.                 Empoyee temp=a;
  15.                 a=b;
  16.                 b=temp;
  17.                
  18.                
  19.         }

  20.         private static void tripeSalary(Empoyee x) {//能改变 salary的值??
  21.                 x.raiseSalary(200);
  22.                
  23.         }

  24.         private static void tipleValue(double percent) {//不能改变percent 的值???
  25.                 percent=3*percent;
  26.                
  27.         }
  28. }
  29. class Empoyee{

  30.         private String name;
  31.         private double salary;

  32.         public Empoyee(String aname, double s) {
  33.                 name=aname;
  34.                 salary=s;
  35.         }
  36.         public String getName(){
  37.                 return name;
  38.         }
  39.         public double getSalary(){
  40.                 return salary;
  41.         }
  42.         public void raiseSalary(double byPercent){
  43.                 double raise=salary*byPercent/100;
  44.                 salary+=raise;
  45.         }
  46.        
  47. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

1 个回复

倒序浏览
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,则就是改后的值。


我是这么理解的  求指正

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马