加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java:更快的重载或if / else

发布时间:2020-12-15 02:06:36 所属栏目:Java 来源:网络整理
导读:我有儿童班,每个班级都有其他成员带来不同类型的价值.可能有LongObject,IntObject,StringObject等. 我将获得一个值,可以是long,int,string等,我必须分别创建一个LongObject,StringObject等. 如下所示重载方法会更快(a),或者只使用如下所示的elseif(b)? 它可
我有儿童班,每个班级都有其他成员带来不同类型的价值.可能有LongObject,IntObject,StringObject等.

我将获得一个值,可以是long,int,string等,我必须分别创建一个LongObject,StringObject等.

如下所示重载方法会更快(a),或者只使用如下所示的elseif(b)?

它可能不是一个明显的性能差异.可能是重载方法以与if / else类似的方式实现.我不知道.

我也可以听到你们中的一些人说要测试一下.当然,我应该.如果有人知道的话,我也想知道如何在引擎盖下处理这种类型的重载.

请让我知道你在想什么.

谢谢,
JBU

一个)

BaSEObject getObject(long l)
{
     return new LongObject(l);
}

BaSEObject getObject(int i)
{
     return new IntObject(i);
}

BaSEObject getObject(String s)
{
     return new StringObject(s);
}

...

b)

BaSEObject getObject(Object x)
{
    if(value is a long)
         return new LongObject((Long)x);
    else if(value is an int)
         return new IntObject((Int)x);
    else if(value is a String)
         return new StringObject((String)x);
    ...
}

编辑:我想我没有完全添加所有细节,有些人抓住了它.对于这两种选择,我仍然需要获取一个对象/值,并从值确定它是什么类型.因此,我仍然需要使用if / else某种甚至使用重载方法.

解决方法

这里有一个巨大的差异:在编译时选择重载,而你的“if(值很长)”将是执行时测试.

如果您在编译时知道类型,我强烈建议您使用该信息.如果不这样做,那么重载选项无论如何都不可行.

编辑:评论建议我详细说明在编译时选择的重载.

编译器根据有关参数的编译时信息选择调用哪个方法签名.这与覆盖的方法不同,其中使用的方法实现由方法的实际目标的类型确定.

这是一个例子:

public class Test
{
    public static void main(String[] args)
    {
        Object x = "I'm a string";
        foo(x);
    }

    public static void foo(String x)
    {
        System.out.println("foo(String)");
    }

    public static void foo(Object x)
    {
        System.out.println("foo(Object)");
    }
}

这会打印foo(Object),因为x的编译时类型是Object,而不是String. x引用的对象的执行时类型是String并不意味着调用foo(String).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读