对Employee对象本身做修改为什么要用另外一个新对象接收呢

对Employee对象本身做修改为什么要用另外一个新对象接收呢

问题描述:

Employee类中的updateSalary方法改变了this对象本身的薪水

public Employee updateSalary(Float val){
        this.salary = this.salary + val;
        System.out.println(this.ename + "调薪至" + this.salary + "元");
        return this;
    }


Class employeeClass = Class.forName("com.imooc.reflect.entity.Employee");
            Constructor constructor = employeeClass.getConstructor(new Class[]{
                    Integer.class,String.class,Float.class,String.class
            });
            Employee employee = (Employee)constructor.newInstance(new Object[]{
                    100,"李磊",3000f,"研发部"
            });
            Method updateSalaryMethod = employeeClass.getMethod("updateSalary" , new Class[]{
                    Float.class
            });
            Employee employee1 = (Employee)updateSalaryMethod.invoke(employee,new Object[]{1000f});
            System.out.println(employee1);

也就是说当对象“李磊”调用updateSalary方法以后,他自己的薪水就自动增加到了4000,所以为什么不用对象“李磊”本身去接收invoke方法,而是要新开辟一个Employee对象去接收呢?


employee = (Employee)updateSalaryMethod.invoke(employee,new Object[]{1000f});
            System.out.println(employee);


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,这里是可以用employee变量接收而不用employee1的,同学可以注释掉toString方法来打印两个对象的地址,实际上是相同的。

课程中老师的重点是演示invoke方法的使用,因为返回对象不是重点,所以没有将对象赋值回employee变量。

祝学习愉快~

  • Macrohard 提问者 #1

    明白啦,谢谢老师的指导,我实验了一下确实是的

    https://img1.sycdn.imooc.com//climg/632bd47e092d6d3905560168.jpg

    employee和employee1的地址相同,是因为updateSalary方法返回的就是this当前对象吧,所以内存并不用给employee1开辟新的空间,等于是给employee指向的空间起了个别名employee1,是这样理解吗?

    2022-09-22 11:21:51
  • 好帮手慕小蓝 回复 提问者 Macrohard #2

    同学你好,同学的理解是正确的。

    祝学习愉快~

    2022-09-22 13:06:48
  • Macrohard 提问者 回复 好帮手慕小蓝 #3

    好的,谢谢老师!

    2022-09-22 13:25:56
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师