前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重构 - 你为什么要对参数赋值?

重构 - 你为什么要对参数赋值?

作者头像
PhoenixZheng
发布2018-08-07 16:12:06
5240
发布2018-08-07 16:12:06
举报

对于学过多门语言的开发者来说,应该都明白在不同语言中对参数赋值有着不同的意义, 总的来说参数有值传递和引用传递两种, 而在Java中只有值传递的概念。

这意味着在方法内对参数赋值是没有意义的。 而且还很容易引起代码的误解。

对于初学者来说这一点比较重要,可能不是很容易理解,我们用例子来说明。

修改参数

我们来看个简单的例子,在这个例子里面我们在方法内对参数进行了修改,

public class ParamDemo{
  public static void main(String[] args) {
    int x = 5;
    modifyParam(x);
    System.out.println("x : " + x);
  }

  private static void modifyParam(int x) {
    x += 5;
    System.out.println("x : " + x);
  }
}

这段代码的输出还不至于让人糊涂,

x : 10 x : 5

但如果修改的是对象的话,代码可能就有误导性了

修改参数对象

为了说明这个问题,我写了一个demo代码,当然代码是完全跑不通的。。只是为了让代码更容易理解,所以才这么写,

public class ParamDemo{
  public static void main(String[] args) {
    Data date = new Date("4月1号 2018")
    modifyParam(date);
    System.out.println("date : " + date);
    resetParam(date);
    System.out.println("date : " + date);
  }

  private static void modifyParam(Date date) {
    date = date + new Date("1天");
    System.out.println("date : " + date);
  }

  private static void resetParam(Date date) {
    date = new Date("5月2号 2018");
    System.out.println("date : " + date);
  }
}

这段代码理解上来就是,实例化了一个日期对象是4月1日,然后在方法内对日期加了一天, 然后再对这个日期(应该变成了4月2日)换车一个5月2日的对象, 这时候就可以验证对参数赋值和对参数修改的区别所在。 如果这代码运行正常的话,输出应该是下面这样

date : 4月2号 date : 4月2号 date : 5月2号 date : 4月2号

你看,在方法内对参数赋值是没有意义的,因为Java它传递的是值,而不是引用,所以并不能够修改原引用的数值。 这对于从 C 这种可以传引用的语言转过来的开发者来说其实有点别扭, 当然他们也可能会被这种代码误导。

总结

Java是一门传值语言,在coding中其实应该尽量避免对参数赋值的行为, 如果你看到代码中有这样的代码, 请尽情重构了它吧!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android每日一讲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 修改参数
  • 修改参数对象
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档