选择重载基元类型或使用数字对象引用

时间:2016-12-07 17:46:20

标签: java overloading

我对数字方法的以下选项感到困惑

  1. 重载
  2. int abs(int)
    long abs(long)
    double abs(double)
    
    1. 父类引用
    2.   

      编号abs(数字)

      哪种方法最好,这两种方法有什么区别?

      如果我们使用父类引用,则不需要重载。是否有使用第二种风格的问题。

      什么时候我们应该选择第一种方法,何时选择第二种方式?

2 个答案:

答案 0 :(得分:2)

主要区别:您的选项1适用于原始类型。

而选项2适用于引用类型(又名对象)。

当然,由于自动装箱和拆箱,您可能只能使用该abs(Number)方法的一个实现。但是:请记住,拳击并不是免费的!

换句话说:选项1允许您进行更精细的粒度控制 - 您知道您的方法实际上是使用int,long,float,double调用的。缺点是您可能开始复制代码。

选项2可能在没有重复代码的情况下工作 - 但它在运行时有一定的价格标签,因为每次和任何时候用一个原始类型值调用该方法......将创建一个新的Number对象(只是为了抛出)之后离开)。

答案 1 :(得分:0)

我会借用蟒蛇禅并说 显式优于隐式

所以第一个重载选项更好。 这样可以在不使用条件的情况下进行更精细的控制

此外,它避免了编译器创建对象,因此我认为它更快