可以将常量值传递给函数参数吗?

时间:2012-02-09 22:35:41

标签: java function variables optimization parameters

我是一名计算机科学专业的学生,​​昨晚我正在学习作业。我偶然发现我的书中的一个功能,我认为这是多余的,但经过进一步的检查,我已经相当“困惑”了

public int refundBalance() {
  int amountToRefund = balance;
  balance = 0;
  return amountToRefund;
}

当我看到这个时,我认为必须创建一个新的局部变量来存储和传递数据是相当多余的,所以我想到了这个:

refundBalance(balance);
public int refundBalance(int amount) {
  balance = 0;
  return amount;
}

但显然,我只是“交易线”。

问题有没有办法始终将相同的参数传递给函数,而不必在调用时传递值?

可选问题:您如何优化此功能? (如果可能的话)

谢谢所有< 3(P.S.这不是家庭作业,只是基本的好奇心。)

3 个答案:

答案 0 :(得分:2)

实际上,您实际上可能希望以原子方式访问余额并保护它免受多个具有访问权限的线程的影响。如果是这种情况,您可以使用AtomicInteger通过getAndSet一次性执行此操作。

import java.util.concurrent.atomic.AtomicInteger;

private final AtomicInteger balance = new AtomicInteger();

public int refundBalance() {
  return balance.getAndSet(0);
}

这实际上是我建议在方法上使用synchronized并按上面的方式编写它。它也恰好是一行: - )。

答案 1 :(得分:1)

原始代码是一种精细的标准面向对象实践。

有一个州,一个私人字段balance,您只能通过公共方法进行修改,以确保会计安全。

现在执行没有局部变量的函数:

public int refundBalance() {
    try {
        return balance;
    } finally {
        balance = 0;
    }
}

应该:

  • 推动余额值
  • 将0存入余额
  • 返回

答案 2 :(得分:0)

如果你的意思是通过默认参数,那么没有。由于refundBalance是一种公共方法,并且包含它的类存储了balance变量,因此外部对象无法确定退款金额是没有意义的 - 如果您需要,可以提供带有amount参数的refundAmount方法那个功能。

至于可选问题,我认为尝试优化该功能毫无意义 - 它很好,并且你不会获得任何性能提升。